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) #私有属性外面不可以使用和修改

python_面向对象——封装

 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()    #调用私有属性的方法,并接收返回值

python_面向对象——封装

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()  

python_面向对象——封装

 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()

python_面向对象——封装

   注意:实例创建完成后,在外面创建不了私有属性。即使在外面使用a.__wdc = 123创建了属性__wdc,这个属性也不具备私有性质。