更改 class 中使用的变量?
Changing a variable used in a class?
我在 class 中使用一个变量作为字符串的一部分,但是打印字符串显示的是变量在程序开始时设置的内容,而不是更改后的内容
我目前的代码基本上是这样说的:
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()
我如何"rerun" class 在函数中使用分配给变量的值?
使用重新分配的 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()
我在 class 中使用一个变量作为字符串的一部分,但是打印字符串显示的是变量在程序开始时设置的内容,而不是更改后的内容
我目前的代码基本上是这样说的:
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()
我如何"rerun" class 在函数中使用分配给变量的值?
使用重新分配的 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()