前言:私有化与继承模式,在编程封装过程中是不可避免使用的,今天我们就来认识一下,他们的使用方式和共性吧
一、什么是私有化?为什么要使用私有化?
答:私有化:我想藏起来,不给外面的人看见/访问/修改,对象、钱财、私房钱 --隐私性强的
答:Python类默认情况下,所有的方法都可以被外部访问(当然其他特殊情况不论),我们为啥要使用私有化嘞?害,还不是为了不想让其他随便用,只想在某个类互相调用。
二、_(浅私有)和__(深私有)的区别
python面向对象 -私有化:
1、_属性/_方法
约定俗成
通过对象名._属性/_方法实际上是可以访问的。
但是它的意思就是,别访问我,我是私有化。全靠自觉
2、__属性/__方法
深度私有。
通过对象名.__属性/__方法访问不到。
只有类内部才能访问 ---如果类内部定义了访问私有的方法。可以通过这个方法得到私有属性的值。
---如果没有定义的话,那私有属性就是除了类以外,都不可以访问
self._pri_money = 200 #这个就是浅私有 在外面都可以访问
self.__svip_pri_money #这个就是深私有 只能在内的内部才能访问
三、私有属性
1、在类的外面不能被访问的属性,私有属性只能在类的内部使用
2、私有属性通过双下划线开头进行定义:__name、 self.__age
3、强行访问方式:
cl.__dict__:获取对象的所有属性
print(TestDemo._TestDemo__name)
print(cl._TestDemo__age)
class TestDemo:
__name = "钱包"
_car = "车"
def __init__(self,age):
self.__age = age
def test_01(self):
print(self.__name)
print(self.__age)
if __name__ == '__main__':
cl = TestDemo(20)
# cl.test_01()
# print(TestDemo.__name)
print(TestDemo.__dict__)
print(cl.__dict__)
print(TestDemo._TestDemo__name)
print(cl._TestDemo__age)
响应:
{'__module__': '__main__', '_TestDemo__name': '钱包', '_car': '车', '__init__': <function TestDemo.__init__ at 0x000001F150A342F0>, 'test_01': <function TestDemo.test_01 at 0x000001F150A34400>, '__dict__': <attribute '__dict__' of 'TestDemo' objects>, '__weakref__': <attribute '__weakref__' of 'TestDemo' objects>, '__doc__': None}
{'_TestDemo__age': 20}
钱包
20