更改类中使用的变量?

时间:2019-03-03 09:34:40

标签: python global-variables static-variables

我正在使用变量作为类中字符串的一部分,但是打印字符串会显示该变量在程序开始时已设置为什么,而不是将其更改为什么

我当前的代码基本上是这样说的:

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 :(得分:1)

使用b的重新分配值的最简单方法是创建类方法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()