面向对象-访问限制
访问限制
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