Изменение переменной, используемой в классе? - PullRequest
0 голосов
/ 03 марта 2019

Я использую переменную как часть строки в классе, однако печать строки показывает, какая переменная была установлена ​​в начале программы, а не то, что было изменено на

Мой текущий код в основном говорит это:

b = 0
class addition:
    a = 1 + b

def enter():
    global b;
    b = input("Enter a number: ")
    print(addition.a) - Prints "1" regardless of what is typed in
enter()

Как бы я "перезапустил" класс, чтобы использовать значение, присвоенное переменной в функции?

1 Ответ

0 голосов
/ 03 марта 2019

Самым простым способом использования переназначенного значения b является создание classmethod a:

b = 0
class addition:
    @classmethod
    def a(cls):
        return 1 + b

def enter():
    global b;
    b = int(input("Enter a number: ")) # convert string input to int
    print(addition.a()) # calling a with ()
enter()

Но это нарушает вашу исходную семантику для вызова addition.a без ().Если вам действительно нужно сохранить его, есть способ использовать метакласс:

class Meta(type):
    def __getattr__(self, name):
        if name == 'a':
            return 1 + b
        return object.__getattr__(self, name)

b = 0
class addition(metaclass=Meta):
    pass

def enter():
    global b;
    b = int(input("Enter a number: "))
    print(addition.a) # calling a without ()
enter()
...