class my_class(object):
def __init__(self):
self.ref = 0
self.ask = 0
self.added = self.ref + self.ask
inst = my_class()
inst.ref = 5
inst.ask = 7
print(inst.ref + inst.ask)
print(inst.added)
我希望
print(inst.added)
返回 12 但它返回 0 最佳答案
实际上,名称为 __init__
的方法是在创建类后立即调用的(参见 __new__
)。这意味着当你做
inst = my_class()
inst.added
已经等于 0
无论你之后做什么。您可以做的是定义另一种方法,该方法在您需要时(以及在实例化之后)执行您需要的操作。例如。
class my_class(object):
def __init__(self):
self.ref = 0
self.ask = 0
@property
def added(self):
return self.ref + self.ask
def add(self):
return self.ref + self.ask
最后
>>> inst = my_class()
>>> inst.ref = 5
>>> inst.ask = 7
>>> inst.added # briefly, the property decorator does the job of calling the callable for you
12
>>> inst.add() # while here, you do call the callable
12
>>> inst.ref = 7
>>> inst.added
14
>>> inst.add()
14
但是,请记住,即使您可以将
added
作为公共(public)属性访问,如果您尝试直接设置它(在 Python 2 以及版本 3 中),也会出现错误,即>>> inst.added = 15
返回以下错误
Traceback (most recent call last):
File "<pyshell#XX>", line YY, in <module>
inst.added = 15
AttributeError: can't set attribute
关于python - 是否可以声明一个将产生两个其他类变量之和的类变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43881808/