考虑以下代码:
class testobj( object ): ...
x = testobj()
x.toast = 'toast'
print( x.toast ) # <-- toast
y = object()
y.toast = 'toast'
最后一行产生错误
AttributeError Traceback (most recent call last)
<ipython-input-24-873470c47cb3> in <module>()
----> 1 y.toast = 'toast'
AttributeError: 'object' object has no attribute 'toast'
我也试过了
class testobj2( object ):
def __init__( self ):
super().__init__()
其行为方式相同,允许设置任意属性。你知道吗
基于我对Python继承的理解,我希望testobj
具有与object
相同的行为(所有方法,包括__setattr__
),因为它是一个子类,没有定义新方法。但是,这不一样,因为上面的代码允许我设置任意属性。为什么会发生这种情况?如何禁止设置任意属性?你知道吗
防止创建属性的一个简单方法是定义
__slots__
:你知道吗
object()不允许任意属性,但这是object实例的特殊规则,在继承时丢失。你知道吗
相关问题 更多 >
编程相关推荐