29.私有属性
python的三大特性为:多态,继承和封装。
在封装时,把属性和方法都隐藏起来,不让别人去用。在python中可以使用私有属性来实现封装。
定义私有属性的方法:
在定义类时,给类中的属性前加一个__,该属性就变成类的私有属性,别的对象都无法调用查看,只有在该类中才能调用。
class Person: def __init__(self,name,sex): self.name=name self.__sex=sex #创建一个私有属性 def fun(self): return self.__sex #在类中调用私有属性 a=Person('hello','man') #print(a.sex) #对象无法调私有属性 print(a._Person__sex) #在类外以_类名__属性名调用属性 print(a.__dict__) a.__high='1.85' #在类外无法给类添加私有属性
如上代码:在类以外的对象无法调用私有属性
但是:
这只是一种代码级别的限制,实际上是可以通过_类名__属性名来查看和调用该属性,因为一旦定义私有属性,就会在内存中生成一个_类名__属性名形式的属性,只要在类的内部使用私有属性,实际上是自动调用_类名__属性名。
但是在类的外部给类中添加一个以__开头的属性,就不会是私有属性。
定义私有方法的方法:
在类中定义方法时,给方法名前添加__,该方法就是私有方法,在类外无法调用该方法。
class Person: __key=123 #定义私有静态属性,只有类内的属性可以调用 def __init__(self,name,sex): self.name=name self.__sex=sex #创建一个私有属性 def fun(self): return self.__siyou_fun() #类内部调用私有方法 def __siyou_fun(self): return 'hello world' a=Person('hello','man') print(a.fun()) # print(a.__siyou_fun()) #类外部无法调用私有方法
如上代码:在类外的对象无法调用类的私有方法。同时无法按照_类名__属性名的形式调用私有方法。
总结:在类中定义静态属性时,给属性前加__,该静态方法就是私有静态方法
父类的私有属性,私有方法,私有静态属性,在子类中也不能调用
class Room: __key='123' class Son(Room): print(Room.__key) #报错
print(_Son_key) #这才能调用父类私有静态方法
在Room类中,__key在内存中被改写为_Room__key,在Son类中,__key在内存中被改写为_Son__key,因此不能调用。
会用到私有这个概念的场景:
1.隐藏起一个属性,不想让类的外部调用
2.向保护这个属性,不想让属性随意改变
3.让子类无法继承这个属性

浙公网安备 33010602011771号