1、私有属性与私有方法
1、私有属性,不能被子类继承,在属性的前面加上__就变为了私有属性
2、私有方法,不能被子类继承,在方法的前面加上__就变为了私有方法
3、注意__只在前面加,后面不加,如果前后都有__的,一般属于类当中自带的方法或属性
class Class_test1:
__str1 = 'A' # 私有属性
def __init__(self):
pass
def __method1(self): # 私有方法
print('这是一个私有方法')
def method2(self): # 通过非私有的其他方法可以调用私有方法或私有属性
print(self.__str1)
self.__method1()
cls1 = Class_test1()
cls1.__str1 # 私有属性不能直接调用,报错
cls1.__method1() # 私有方法不能直接调用,报错
cls1.method2() # 可以间接调用
# 输出:
# A
# 这是一个私有方法
class Class_test2(Class_test1):
pass
cls2 = Class_test2()
cls2.__str1 # 私有属性不能直接调用,报错
cls2.__method1() # 私有方法不能直接调用,报错
cls2.method2() # 可以间接调用
# 输出:
# A
# 这是一个私有方法
2、多继承
class Money1:
def money(self):
print('正面')
def money1(self):
print('纸币的正面')
class Money2:
def money(self):
print('反面')
def money2(self):
print('纸币的反面')
class Money3(Money1, Money2): # 继承顺序决定碰到同名的父类方法继承哪一个
pass
my = Money3()
my.money()
my.money1()
my.money2()
# 输出:
# 正面
# 纸币的正面
# 纸币的反面
3、多态
练习-1
class Animal(object):
def say(self):
pass
class Dog(Animal):
def say(self):
print('汪汪汪~')
class Cat(Animal):
def say(self):
print('喵喵喵~')
def animal_say(obj):
obj.say()
dog = Dog()
cat = Cat()
print(animal_say(dog))
print(animal_say(cat))
练习-2
class Fanguan(object):
pass
class Yuxiangrousi(Fanguan):
def caidan(self):
print('鱼香肉丝')
class Gongbaojiding(Fanguan):
def caidan(self):
print('宫保鸡丁')
class Qingjiaotudou(Fanguan):
def caidan(self):
print('青椒肉丝')
def fuwuyuan(obj):
obj.caidan()
guke1 = Yuxiangrousi()
guke2 = Gongbaojiding()
guke3 = Qingjiaotudou()
print(fuwuyuan(guke1))
print(fuwuyuan(guke2))
print(fuwuyuan(guke3))