你好,我需要一个未实例化的类属性,我正在这样做:
>>> class X:
... def __init__(self, y=None):
... self.y = list()
这样可以吗?如果不是,是否有另一种方法。我无法在 __init__
中实例化此属性,因为我稍后会附加到此。
最佳答案
在类级属性上定义 y
var。您需要将其初始化为某些内容,即使它是一个空列表(就像您之前所做的那样)。
>>> class X:
... y = []
... def __init__(self):
... pass
根据您的评论更新:
您提到您混淆了术语(我假设在类和实例变量之间),所以如果您使用此类(并且可能不是您想要的)会发生什么。
>>> class X:
... y = [] # Class level attribute
... def __init__(self):
... pass
...
>>> x = X()
>>> x.y.append(1)
>>> x.y
[1]
>>> x.y.append(2)
>>> z = X()
>>> z.y.append(3)
>>> z.y
[1, 2, 3]
>>> X.y.append(4)
>>> [1, 2, 3, 4]
请注意,当您向类中添加一个变量时,它会停留在构造之间。在前面的代码中,我们将变量x
和变量z
实例化为X的实例。而我们在y
变量中添加了z
实例,我们仍然附加到类变量 y
。请注意最后一行 (X.y.append(4)
) 我使用对类 X
的引用附加了一个项目。
您可能想要的是基于您的原始帖子:
>>> class X:
... def __init__(self, y=None):
... self.y = y or list() # Instance level attribute. Default to empty list if y is not passed in.
...
>>> x = X()
>>> x.y.append(1)
>>> x.y
[1]
>>> z = X()
>>> z.y.append(2)
>>> z.y
[2]
>>>
>>> s = X()
>>> s.y
[]
>>> t = X(y=[10])
>>> t.y
[10]
注意每个实例是如何创建一个新列表的。当我们创建一个新实例 z
并尝试附加到 y
变量时,我们只会获得附加的值,而不是将所有现有的添加项保留到列表中。在最后一个实例化 (t
) 示例中,构造函数在其构造中传入了 y
参数,因此具有列表 [10]
y
实例变量。
希望对您有所帮助。随意询问更多不确定性作为评论。另外,我建议阅读 Python 类文档 here .
关于python - 未实例化的类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192211/