我尝试在空闲时执行这段代码并出现以下错误,
class Myclass():
i = 1
x = Myclass()
x.y = 10
x.i=10
x.i
# 10
x.y
# 10
这个类只有1个属性'i',但是当我指定x.y = 10时,Python将如何允许它工作。这不是问题吗?我该如何防止它发生?
答案 0 :(得分:3)
正如其他答案所提到的,这是一个功能而非错误。
如果您只想强制执行一组有限的属性,可以将__slots__
与new-style classes一起使用(从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'
答案 1 :(得分:2)
与许多其他语言(如Java)不同,Python会动态分配类成员。这意味着您不需要在类的定义中包含一个变量就可以分配给它。
另请注意,类变量与您指定的类变量之间存在差异:
class Myclass():
i = 1
和一个班级成员:
class Myclass():
def __init__(self):
self.i = 1
答案 2 :(得分:0)
这就是你在Python中定义类变量的方法。您可以使用某些“魔术”功能来阻止此行为,但通常不建议这样做。