变量私有化
1、变量前加__(两个下划线),则变量私有化
2、私有化的变量不能在外部直接访问,可以在类的内部随意使用。
3、子类不会继承父类私有化的变量
class Animal():
def eat(self):
print('动物在吃东西')
pass
def __run(self):
print('动物在跑')
pass
pass
class Dog(Animal):
pass
dog1 = Dog()
dog1.eat()
dog1.__run()
报错:
动物在吃东西
Traceback (most recent call last):
AttributeError: ‘Dog’ object has no attribute ‘__run’
class Animal():
def eat(self):
print('动物在吃东西')
self.__run()
pass
def __run(self):
print('动物在跑')
pass
pass
class Dog(Animal):
pass
dog1 = Dog()
dog1.eat()
输出:
动物在吃东西
动物在跑
变量设为私有之后,可以通过设置类似java中的get、set方法来获取或修改,并且可以在方法中设置修改的条件。
class Person():
__age = 0
__name = '无名氏'
def getAge(self):
return __age
def setAge(self,age):
if (age > 0 & age<150):
Person.__age = age
else:
print('年龄非法')
def __init__(self,name,age):
Person.__age = age
Person.__name = name
pass
def __str__(self):
return('{}年龄{}'.format(Person.__name,Person.__age))
person1 = Person('Nick',21)
print(person1)
person1.setAge(22)
print(person1)
输出:
Nick年龄21
Nick年龄22
前单下划线、双下划线、头尾双下划线、后单下划线:
单下划线:_XXX,即protected类型的变量,只允许类本身和其子类进行访问,子类可继承。
双下划线:__XX,即private类型的变量
头尾双下划线:魔法方法,一般为python自由方法,自己定义方法时不要定义这样的方法。
后单下划线:当属性名和python 关键字冲突时,可以这样定义来避免冲突。