面向对象-访问限制
访问限制
1、私有属性
- 
属性类型 - 
公有 内部外部均可访问 
- 
私有 - 让该属性在类的内部正常访问 不允许外部访问
- python中私有属性以__作为开头 就成为了私有属性 此刻只能在内部访问使用
 私有属性原因 类的私有属性可以在一个公有的方法里 去调用和修改值 可以对参数进行验证 避免传入无效参数 
 
- 
- 
私有属性的访问 - 
类的内部 self.__属性名 
- 
类的外部 外部不建议访问私有属性 因为这样就失去了私有的作用 但是一切都靠自觉 并不会完全限制你 内部私有属性在存储的时候 将私有属性名转存为 _类名__属性名的方式 所以在外部__属性名 是获取不到的 对象._类名__属性名 即可 
 
- 
- 
继承 私有不能被继承 
- 
实例 class Test: name = 'lucky' __age = 18 def test_private(self): print(self.__age) # 创建公有方法用于修改私有属性的值 def update_private(self, value): # 对于私有属性值进行了判断 if value > 100 or value < 0: print('请输入正确的年龄') return # 进行修改 self.__age = value t = Test() # 外部不允许访问私有属性(抛出异常) print(t.__age) print(t.name)
- 
验证私有属性值的存储 _类名__属性名 class Test: name = 'lucky' __age = 18 # 创建公有方法用于修改私有属性的值 def update_private(self, value): self.__age = value print(self.__dict__) t = Test() t.update_private(20)
2、私有方法
- 
概述 __private_method以双下划线作为开头 声明该方法为私有方法 只能在类的内部调用和使用 不能再外部调用
- 
注意 私有不能被继承 
- 
私有方法的定义及使用 class Test: def __init__(self, name='lucky'): self.name = name def __say(self): print('学习使我开心') def test_private_method(self): self.__say() t = Test() # t.__say() t.test_private_method() # 外部访问(不建议) t._Test__say()
3、@property装饰器
- 
概述 让访问私有属性变成访问公有属性一样的方便 让私有属性可以 对象.属性名 一样去调用 property装饰器 将方法变成了属性一样的调用 
- 
实例 不适用property装饰器 class Test: __age = 18 def get_age(self): print(self.__age) def set_age(self, value): self.__age = value t = Test() t.set_age(20) t.get_age()使用property装饰器 class Test: __age = 18 @property def age(self): return self.__age @age.setter def age(self, val): self.__age = val t = Test() # print(t.age) t.age = 20 print(t.age)
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16021561.html

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号