假设我有一个类似以下的课程:
class Test:
def __init__(self, some_data_source):
self.a = 5
self.b = some_data_source['c']
我想将此类的所有实例变量设为只读,并将按如下方式使用它:
data_source = {
'c': 'some data'
}
x = Test(data_source)
# Should be illegal i.e result in an exception
x.a = 5
x.b = None
# This should be legal
print(x.a)
最初,我考虑使用 properties,但后来我意识到为了动态添加它们,我需要在定义类之后添加这些属性(例如Test.attribute = property(...)
)。这不起作用,因为我想在类中定义这些属性(特别是在 中__init__
)。
我怎样才能使我的所有实例变量对一个类都是只读的?