加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何限制在构造函数之外设置属性?

发布时间: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,但是该属性为私有的前导_文档.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读