如何限制在构造函数之外设置属性?
发布时间:2020-12-20 12:28:27 所属栏目:Python 来源:网络整理
导读:我想在初始化之后禁止对类的某些属性进行进一步的赋值.例如;在初始化Person实例’p’之后,没有人能够明确地将任何值分配给’ssn'(社会安全号码)属性.在_init_方法中分配值时也会调用_setattr_,因此它不是我想要的.我想仅限制进一步的作业.我怎样才能做到这一
我想在初始化之后禁止对类的某些属性进行进一步的赋值.例如;在初始化Person实例’p’之后,没有人能够明确地将任何值分配给’ssn'(社会安全号码)属性.在_init_方法中分配值时也会调用_setattr_,因此它不是我想要的.我想仅限制进一步的作业.我怎样才能做到这一点?
class Person(object): def __init__(self,name,ssn): self.name = name self._ssn = ssn def __setattr__(self,value): if name == '_ssn': raise AttributeError('Denied.') else: object.__setattr__(self,value) >> p = Person('Ozgur','1234') >> AttributeError: Denied. 解决方法
通常的方法是使用以下划线开头的“private”属性和用于公共访问的只读属性:
import operator class Person(object): def __init__(self,ssn): self.name = name self._ssn = ssn ssn = property(operator.attrgetter("_ssn")) 请注意,这并不会真正阻碍任何人更改属性_ssn,但是该属性为私有的前导_文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |