Как получить переменную из другого класса python

Как получить доступ к переменной класса из другого класса в Python?

То есть, когда B.method2 модифицирует self.state, вызывая self.method1, я хочу, чтобы он self.state = ‘CHAT’ уже существующее значение self.state = ‘CHAT’ в экземпляре A. Как я могу это сделать?

У вас есть атрибуты экземпляра , и они специфичны для экземпляров. Вы на самом деле не звоните ob_B.method2 .

Это моя проблема. Я хочу, чтобы self.state был переменной класса, а затем инициализировать ее при создании объекта A.

3 ответа

Экземпляр передается как первый аргумент для каждого из ваших методов, поэтому self является экземпляром. Вы устанавливаете атрибуты экземпляра, а не переменные класса.

class A: def __init__(self): A.state = 'CHAT' def method1(self): A.state = 'SEND' def printer(self): print A.state class B(A): def method2(self): self.method1() print B.state ob_B = B() ob_A = A() ob_B.method2() ob_A.printer() 

Благодарю. Это делает это хорошо. 🙂 Но, будучи любознательным, скажем, что self.state является переменной экземпляра. Есть ли способ получить к нему доступ из класса B?

@IndradhanushGupta Да, это часть экземпляра, поэтому не имеет значения, в каком классе вы находитесь, пока вы не переопределите его в B , вы просто получите к нему доступ как self.x ,

Вы можете вызвать метод printer(), используя объект B, чтобы получить обновленное значение.

ob_B = B() ob_A = A() ob_B.method2() ob_B.printer() 

Источник

Как правильно обращаться к переменной класса из другого класса?

Доброго времени суток!
Примерно с 2 недели назад начал изучать Python, до этого был не большой опыт программирования. Получил интересное задание от товарища, вопрос будет как раз по нему (введение дабы сразу не кидались палками 🙂 )

Вопрос состоит в следующем:
Как мне обратиться к двум переменным, а именно twist_num и choice_num (сравнение для дальнейшей работы с балансом)?

Пробовал через сеттер, ничего не вышло, в коде ниже попытался задействовать прямое обращение.
Вроде как сама IDE обращение видит и понимание, но при дальнейшей проверки кода в консоли = ноль реакции..

from random import randint class Balance(object): def __init__(self): self.money() self.input_bet() def run(self): self.input_bet = None def input_bet(self): input_bet = input('Ваша ставка: \n') try: input_bet = int(input_bet) self.input_bet = input_bet except Exception: print('Не число') def money(self) -> None: money = 10000 print("Ваш баланс:" + str(money)) #---------------------------------------------------------------------------------------- class Roulette(object): def __init__(self): self.__choice_num = None self.__twist_num = None def run(self): while True: self.input_number() self.twist_roulette() self.check_choice_num() def input_number(self) -> None: is_num = False while not is_num: number = input('Введите целое число от 0 до 36 \n') try: number = int(number) is_num = True self.choice_num = number except Exception: print('Опаньки. Что-то ты сделал не так. \n') def twist_roulette(self) -> None: self.twist_num = randint(0,1) def check_choice_num(self) -> None: if self.choice_num == self.twist_num: print('Ты победил: выпало число ' + str(self.twist_num)) return print('Ты проиграл: выпало число ' + str(self.twist_num)) #---------------------------------------------------------------------------------------- class Game: def __init__(self): self.roulette = Roulette() self.balance = Balance() def run(self): self.game_lose() self.game_won() def game_won(self): if roulette.choice_num == roulette.twist_num: print('You won!') balance = Balance() balance.run() roulette = Roulette() roulette.run() game = Game() game.run()

Простой 2 комментария

Источник

Как в python обратиться к переменной родительского класса?

Грубо говоря функция sum должна написать «11»
Я может где то не верно выразился.
Мне это нужно для программки на PyQt. Я из главного окна открываю вручную нарисованные диалоговые окошки, в которых запрашиваю различные данные, и хочу что бы эти данные сохранились в главном окне. (Возможно вы меня поймете)

Не очень понял, зачем Вам это надо, но минимальные исправления ниже, причем варианты для Dialog1 и Dialog2 разные, без доп.информации не знаю, как лучше.

class Main(object): # основная функция def __init__(self): self.ab = AB() # создаем экзмпляр класса с переменными d1 = Dialog1(self.ab) # Создаем экзэмпляр класса который должен поменять переменную ab.a d2 = Dialog2(self) # Создаем экзэмпляр класса который должен поменять переменную ab.b def sum(self): c = self.ab.a + self.ab.b print(c) class Dialog1(object): def __init__(self, parent): parent.a = 5 # . Пытаюсь поменять значение в переменной созданом в родительском классе Main class Dialog2(object): def __init__(self, parent): parent.ab.b = 6 # . Пытаюсь поменять значение в переменной созданом в родительском классе Main class AB(object): a = 1 b = 2 m = Main() print(m.ab.a) print(m.ab.b)

Спасибо это работает. Причем до этого догадаться было не сложно. Специально для вас нарисавал ПРИМЕРНУЮ картинку замысла. (Если вдруг интересно) joxi.ru/KAx9px7U4YG3jr.jpg

Войдите, чтобы написать ответ

Как загрузить фото из сообщения в буфер?

Источник

Читайте также:  Определить длину массива python
Оцените статью