继续整理python------多继承与搜索顺序、多态

52 阅读1分钟
# 多继承与搜索顺序  
  
class Base:  
def test(self):  
print('--------Base--------')  
  
class A(Base):  
def test(self):  
print('AAAAAAAAAAAA')  
  
class B(Base):  
def test(self):  
print('BBBBBBBBBBBB')  
  
class C(Base):  
def test(self):  
print('-------->CCCCCCCC')  
  
class D(A,B,C):  
pass  
# c = C()  
# c.test()  
# c.test1()  
# c.test2()  
  
d = D()  
d.test()  
  
'''  
python允许多继承,  
def 子类(父类1,父类2,...)  
pass  
# 多继承经典类:python2经典类深度优先 python3新式类广度优先  
'''  
  
# 查看搜索顺序  
import inspect  
print(inspect.getmro(D))  
print(D.__mro__)  
print(D.mro())  
  
# 多态 封装 继承 ------》面向对象  
class Person:  
def __init__(self,name):  
self.name = name  
  
def feed_pet(self,pet):# pet既可以接受cat,也可以接受dog,还可以接受tiger,这就是python的多态  
if isinstance(pet,Pet): # --->判断obj是不是类的对象或者判断obj是不是该类子类的对象  
print('{}喜欢养宠物:{},昵称是{}'.format(self.name,pet.nickname,pet.role))  
else:  
print('千万别养!')  
  
class Pet:  
role = 'Pet'  
def __init__(self,nickname,age):  
self.nickname = nickname  
self.age = age  
  
def show(self):  
print('昵称:{},年龄:{}'.format(self.nickname,self.age))  
  
class Cat(Pet):  
role = '猫'  
def catch_mouse(self):  
print('抓老鼠...')  
  
class Dog(Pet):  
role = '狗'  
def wathc_house(self):  
print('看家高手...')  
  
class Tiger:  
def eat(self):  
print('太可怕了,可以吃人...')  
  
cat = Cat('bo',2)  
dog = Dog('bigy',2)  
  
person = Person('hh')  
tiger = Tiger()  
person.feed_pet(cat)  
person.feed_pet(tiger)