
该
object类型是用C编写的内置类,不允许您向其添加属性。它已被明确编码以防止出现这种情况。
在您自己的类中获得相同行为的最简单方法是使用
__slots__属性来定义要支持的确切属性的列表。Python将仅为那些属性保留空间,而不允许其他任何属性。
class c(object): __slots__ = "foo", "bar", "baz"a = c()a.foo = 3 # worksa.b = 3 # AttributeError
当然,这种方法有一些注意事项:您不能腌制此类对象,并且期望每个对象都具有
__dict__属性的代码都将破坏。一种“更具Python风格”的方法是使用
__setattr__()另一个海报所示的自定义。当然,有很多方法可以解决此问题,而没有办法设置
__slots__(除了子类化和将属性添加到子类之外)。
通常,这不是您实际上应该在Python中要做的事情。如果您的类的用户想要在类的实例上存储一些额外的属性,则没有理由不让他们使用,实际上有很多原因您可能想要这么做。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)