python - 未实例化的类属性

标签 python

你好,我需要一个未实例化的类属性,我正在这样做:

>>> 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/

相关文章:

python - 跨同一索引的 3 个数据帧的函数

python - 2 groupby 在同一个数据框中,可能吗?

python - 如何提取*args

python - 如何在 linux 中安装 python 的 sphinx 文档生成器?

用于匹配 3 个和 16 个字符的 Python 正则表达式

python - 属性错误 : 'module' object has no attribute '[x]'

python - 如何在 pandas 数据框中对时间进行分类

python - pep 420 setup.py 中的namespace_packages用途

python - 哪个更快?内存缓存还是文件查询? (使用 maxmind geoip.dat 文件)

python - Python 2048 游戏