Python(二十五)——私有属性和私有方法(实现封装)
1、两个下划线开头的属性是私有的(private)。
2、类内部可以直接访问私有属性(方法)。
3、类外部不可以直接访问私有属性(方法)。
4、类外部可以通过“__类名__私有属性(方法)名”访问私有属性(方法)。
class B:
def __init__(self,name,age):
self.name = name
self.__age = age
if __name__=='__main__':
b = B('Lili',19)
print(b.name) #Lili
print(b._B__age) #19
print(dir(b))
#['_B__age', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']
私有方法和属性的调用
class B:
__b = '你好'#私有类变量
def __init__(self,name,age):
self.name = name
self.__age = age
def __c(self):#私有方法
print('cccc')
print(self.__age) #直接调用私有属性
print(B.__b) #调用类的私有属性
if __name__=='__main__':
b = B('Lili',19)
print(b.name)
#Lili
print(b._B__age) #调用私有对象属性
#19
print(b._B__c()) #调用私有方法
#cccc
#19
#你好
#None
print(b._B__b) #调用私有类变量
#你好