python_面向对象——封装
1.私有属性
class Person(object): def __init__(self,name,age): self.name = name self.age = age #实例属性 self.attack_val = 30 self.__life_val = 100 #前面加两个下划线就是私有变量,私有属性 a = Person('wdc',22) print(a.age) #实例属性可以直接外面使用和修改 print(a.__life_val) #私有属性外面不可以使用和修改
2.私有属性的用法
class Person(object): def __init__(self,name,age): self.name = name self.age = age #实例属性 self.attack_val = 30 self.__life_val = 100 #前面加两个下划线就是私有变量,私有属性 def get_life_val(self): print(self.__life_val) #可以在类的内部用方法调用 return self.__life_val #也可以在类的内部用方法返回属性的值 def got_life_val(self): #只能通过内部方法修改私有属性的值 self.__life_val = self.__life_val - 20 a = Person('wdc',22) b = a.get_life_val() #调用私有属性的方法,并接收返回值 print(b) a.got_life_val() #执行内部方法修改私有属性 b = a.get_life_val() #调用私有属性的方法,并接收返回值
3.对方法的封装
class Person(object): def __init__(self,name,age): self.name = name self.age = age def __breath(self): #将方法封装 print('{}在呼吸'.format(self.name)) def attack(self): self.__breath() #只能通过内部的其他方法去调用私有方法 a = Person('wdc',22) a.attack()
4.如果非要在外部访问或者修改私有属性或者方法可以使用:实例名._类名+方法名()
class Person(object): def __init__(self,name,age): self.name = name self.age = age self.__life_val = 100 def __breath(self): #将方法封装 print('{}在呼吸'.format(self.name)) def attack(self): self.__breath() #只能通过内部的其他方法去调用私有方法 def get_life_val(self): print(self.__life_val) a = Person('wdc',22) a.attack() # 实例名._类名+方法名() a._Person__breath() #调用私有方法 a._Person__life_val = 10 #修改私有属性 a.get_life_val()
注意:实例创建完成后,在外面创建不了私有属性。即使在外面使用a.__wdc = 123创建了属性__wdc,这个属性也不具备私有性质。