首页 python基础教程 Python面向对象-通过__dict__属性对类属性进行安全处理
pay pay
教程目录

Python面向对象-通过__dict__属性对类属性进行安全处理

日期: 二月 13, 2023, 11:43 p.m.
栏目: python基础教程
阅读: 487
作者: Python自学网-村长

摘要: 在上面的只读属性中有很多方法都能修改只读属性的值,比如per.__dict__['_Person__money'] = 80。在python内部每次对只读属性进行操作的时候都会调用__setattr__方法,这个方法操作之后才会存储到__dict__中所以我们可以通过这个方法来做安全处理。

在上面的只读属性中有很多方法都能修改只读属性的值,比如per.__dict__['_Person__money'] = 80。在python内部每次对只读属性进行操作的时候都会调用__setattr__方法,这个方法操作之后才会存储到__dict__中所以我们可以通过这个方法来做安全处理。

class Person(object):
    def __setattr__(self, key, value):
        print(key, value)

p1 = Person()
p1.age = 18
print(p1.__dict__)  # 到此为止还没有吧age = 18添加到属性中

上面定义好了一个类,并且重写了__setattr__方法,下面我们来添加属性。

class Person(object):
    def __init__(self):
        self.age = 19

    def __setattr__(self, key, value):
        if key == 'age' and key in self.__dict__.keys():  # 判断key是只读的age并且存在于属性中,否则就是添加属性
            print('只读属性不允许修改')
        else:
            self.__dict__[key] = value

我们再实例化一个对象看看运行的结果。

p2 = Person()
p2.age = 18  # 不能修改只读属性
# print(p2.age)  # 无法只读,在上面的if中要加上另一个条件
p2.sex = 'man'  # 不是只读属性
print(p2.__dict__)

返回结果:

只读属性不允许修改
{'age': 19, 'sex': 'man'}

从结果可以看出来每当我们增加属性的时候,其内部代码都会走一遍__setattr__方法。

部分文字内容为【Python自学网】原创作品,转载请注明出处!视频内容已申请版权,切勿转载!
回顶部