首页 Python基础入门视频教程 __setattr__方法实现Python属性安全处理
pay pay

__setattr__方法实现Python属性安全处理

日期: 二月 14, 2023, 8:41 a.m.
阅读: 370
作者: Python自学网-村长

摘要: __setattr__方法实现Python属性安全处理

00:00 / 12:00
1x
2x
1.5x
1.25x
1x
0.8x
0.5x
>
面向对象
    1. 第1课:Python面向对象程序设计
      12分钟
    2. 第2课:类属性和对象属性
      12分钟
    3. 第3课:类属性和对象属性操作本质对比
      12分钟
    4. 第4课:类属性和对象属的区别和使用对比
      12分钟
    5. 第5课:Python类方法的创建
      12分钟
    6. 第6课:实例方法,类方法和静态方法
      12分钟
    7. 第7课:三种方法访问权限对比
      12分钟
    8. 第8课:面向对象基础-元类
      12分钟
    9. 第9课:类属性,私有化属性,受保护属性的访问区别
      12分钟
    10. 第10课:面向对象-属性-私有化属性
      12分钟
    11. 第11课:面向对象-属性-只读属性
      12分钟
    12. 第12课:property操作只读属性
      12分钟
    13. 第13课:属性安全补充
      12分钟
    14. 第14课:内置属性
      12分钟
    15. 第15课:类属性,实例属性,初始化属性
      12分钟
    16. 第16课:面向对象-方法-方法回顾
      12分钟
    17. 第17课:内置特殊方法-对象信息重写
      12分钟
    18. 第18课:内置特殊方法-调用
      12分钟
    19. 第19课:内置特殊方法-索引操作
      12分钟
    20. 第20课:内置特殊方法-切片
      12分钟
    21. 第21课:内置特殊方法-对象比较
      12分钟
    22. 第22课:内置特殊方法-上下文环境的布尔值
      12分钟
    23. 第23课:内置特殊方法-迭代和遍历
      12分钟
    24. 第24课:内置特殊方法-描述器
      12分钟
    25. 第25课:内置特殊方法-装饰器
      12分钟
    26. 第26课:内置特殊方法-对象生命周期
      12分钟
    27. 第27课:内置特殊方法-面向对象小结案例
      12分钟
    28. 第28课:三大特性-继承和继承关系
      12分钟
    29. 第29课:三大特性-资源的继承和使用
      12分钟
    30. 第30课:三大特性-资源的覆盖或累加
      12分钟
    31. 第31课:三大特性-多态
      12分钟
    32. 第32课:面向对象-抽象类
      12分钟

面向对象-属性-属性安全补充。

# 在上面的只读属性中有很多方法都能修改只读属性的值,比如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添加到属性中

# 添加属性
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__)

 

原创视频,版权所有,未经允许,切勿转载,违者必究!
回顶部