我尝试在空闲时执行这段代码并出现以下错误,
class Myclass():
i = 1
x = Myclass()
x.y = 10
x.i=10
x.i
# 10
x.y
# 10
这个类只有1个属性'i',但是当我分配xy = 10时,Python将如何允许它工作。这不是问题吗?我该如何防止它发生?
我尝试在空闲时执行这段代码并出现以下错误,
class Myclass():
i = 1
x = Myclass()
x.y = 10
x.i=10
x.i
# 10
x.y
# 10
这个类只有1个属性'i',但是当我分配xy = 10时,Python将如何允许它工作。这不是问题吗?我该如何防止它发生?
正如其他答案所提到的,这是一个功能而不是错误。
如果您只想强制执行一组有限的属性,您可以使用__slots__
新样式类(继承自的类object
):
class Myclass(object):
__slots__ = ['i']
>>> x = Myclass()
>>> x.i = 10
>>> x.y = 10
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Myclass' object has no attribute 'y'
与 Java 等许多其他语言不同,Python 动态分配类成员。这意味着您不需要在类的定义中包含变量就可以分配给它。
另请注意,与您分配的类变量之间存在差异:
class Myclass():
i = 1
和一个班级成员:
class Myclass():
def __init__(self):
self.i = 1
这就是你在 Python 中定义类变量的方式。您可以使用一些“魔术”功能来防止这种行为,但通常不建议这样做。