您可以实现
__setattr__
方法——比
__slots__
这通常被误用于目的(例如,
_插槽__
当类从继承时自动“丢失”,而
_塞塔特__
除非明确重写,否则生存)。
def __setattr__(self, name, value):
if hasattr(self, name):
object.__setattr__(self, name, value)
else:
raise TypeError('Cannot set name %r on object of type %s' % (
name, self.__class__.__name__))
你必须确保
hasattr
你的名字成功了
做
希望能够设置,例如通过在类级别设置属性或使用
object.__setattr__
在你的
__init__
方法而不是直接属性分配。(禁止在
班
而不是它
实例
您必须使用类似的特殊方法定义自定义元类)。