【发布时间】:2012-06-11 08:12:08
【问题描述】:
我想禁止在初始化后对类的某些属性进行进一步分配。例如;在 Person 实例“p”被初始化后,没有人可以显式地为“ssn”(社会安全号码)属性分配任何值。 _setattr_ 在 _init_ 方法中分配值时也被调用,因此不是什么我想要。我只想限制进一步的任务。我怎样才能做到这一点?
class Person(object):
def __init__(self, name, ssn):
self.name = name
self._ssn = ssn
def __setattr__(self, name, value):
if name == '_ssn':
raise AttributeError('Denied.')
else:
object.__setattr__(self, name, value)
>> p = Person('Ozgur', '1234')
>> AttributeError: Denied.
【问题讨论】:
-
只是因为
__init__中的作业也调用了__setattr__ -
我认为您可能不得不尝试使用元类
-
仅供参考,这并不是 Python 的真正工作方式。记录您的 API 以告诉其他开发人员不要更改它。
-
@detly:Python 中通常的理念是采取措施防止意外违反合同,而不是费心防止故意违约。
-
@SvenMarnach - 真;由 OP 将规则应用于他或她的情况。
标签: python variable-assignment setattr