3

我尝试在空闲时执行这段代码并出现以下错误,

class Myclass():
    i = 1

x = Myclass()
x.y = 10
x.i=10
x.i
# 10
x.y
# 10

这个类只有1个属性'i',但是当我分配xy = 10时,Python将如何允许它工作。这不是问题吗?我该如何防止它发生?

4

3 回答 3

4

正如其他答案所提到的,这是一个功能而不是错误。

如果您只想强制执行一组有限的属性,您可以使用__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'
于 2012-08-07T17:00:42.470 回答
2

与 Java 等许多其他语言不同,Python 动态分配类成员。这意味着您不需要在类的定义中包含变量就可以分配给它。

另请注意,与您分配的类变量之间存在差异:

class Myclass():
     i = 1

和一个班级成员:

class Myclass():
    def __init__(self):
        self.i = 1
于 2012-08-07T16:57:20.280 回答
0

这就是你在 Python 中定义类变量的方式。您可以使用一些“魔术”功能来防止这种行为,但通常不建议这样做。

于 2012-08-07T16:57:18.540 回答