此问题已在此处有答案:
Prevent creating new attributes outside init(13个回答)
关闭2天前.
class Foo:
def __init__(self):
self.A = 100
class Boo(Foo):
def __init__(self):
super(Boo, self).__init__()
self.B = None
x = Boo()
print(x.A, x.B)
# 100 None
如上所示,我已经创建了一个Boo
的示例,它的属性为A
和B
。现在我只想在__init__
期间创建属性时才给它们赋值。也就是说,如果我设置x.A=0
,它就可以工作,但是当我想给一个新的属性x.C=False
设置值时,它应该什么都不做。
2条答案
按热度按时间slwdgvem1#
这与您的要求不完全相同,但您可能希望使用
__slots__
来控制可以创建哪些属性,然后确保在__init__
中初始化它们。您可以继续在代码的其他地方修改
x.A
和x.B
的值(即使不是在__init__
中创建的),但是任何创建新属性(如x.C
)的尝试都将导致AttributeError
。bkhjykvo2#
你可以尝试重写
Boo
类的__setattr__()
函数,然后你可以设置一个条件,使用hasattr()
内置函数来检查示例是否已经存在给定的名称,如果存在,则设置值,否则不做任何事情,下面是可能对你有帮助的代码;