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/

10-16 02:16