学习笔记之三十六
‘’’
多继承:一个子类继承多个父类
多继承时的调用查询顺序:
python3.0版本中都是 新式类型:广度优先,
python2.0版本中是经典类型,深度优先
具体例如下:
‘’’
class P1:
def foo(self):
print(‘P1--------------foo’)
def bar(self):
print('P1---------bar')
class P2:
def foo(self):
print(‘P2-------------foo’)
class C1(P1,P2):
def bar(self):
print(‘C1----------foo’)
class C2(P1,P2):
def bar(self):
print(‘C2--------------bar’)
class D(C1,C2):
pass
d=D()
d.foo()
d.bar()
#1、上述一个类继承多个类,即有多个父类(基类)的 称为多继承
#上述多继承的调用查询顺序 D-C1-C2-P1-P2 即广度优先,
#以前的Python2.0版本是:深度优先,先找 D-C1-P1-P2,如果找不到,再找D-C2-P1-P2
#多继承中 搜索顺序的查看:
#1、D.mro
#2、import inspect
#print(inspect.getmro(D))
#多容——例如
class Person:
def init(self,name,age):
self.name=name
self.age=age
def feed_pet(self,pet):
# 1、上述pet在Python中可以接受任何输入的实参(此处为动物名)-这叫做多容,但是在其他语言中只能
# 接受以pet为父类的子类,在Python中为了实现此功能,只能通过if判断加以筛选,
# isinstance(obj,类名) 判断这个对象是否是这个类的对象或这个类的子类对象
if isinstance(pet,Pet):
print('{}喜欢养宠物,宠物名叫:{}'.format(self.name,pet))
else:
print('不是宠物类型的动物,不能养!')
print('{}喜欢养宠物,宠物名叫:{}'.format(self.name, pet))
class Pet:
role=‘宠物’
def init(self,nickname,age):
self.nickname=nickname
self.age=age
class Cat(Pet):
role=‘猫’
def catch_mouse(self):
print(‘抓老鼠高手---------’)
class Dog(Pet):
role=‘狗’ #类属性 可以以类名直接调用
def watch_house(self):
print(‘狗狗是看家忠诚---------------’)
class Tiger:
def eat(self):
print(‘老虎特别喜欢吃肉——-------’)
#创建对象
c=Cat(‘小黑’,4)
c.catch_mouse()
print(’…’)
p=Person(‘李杰’,27)
p.feed_pet(‘花花’)
p.feed_pet(Dog) #类 Cat或Dog可以直接当实参调用
p.feed_pet(Tiger)
‘’’
三:总结
1、封装:
私有化 就是:属性前边加__
__age
def show(self):
pass
类名 ——属性
私有化:封装 将类的属性私有化 因为私有化属性不能直接进行修改,所以 set和get方法
def setAge(self,age):
判断 是否进行修改
def getAge(self):
return self.age 因为是获取私有化属性,所以需要返回值
调用
s.setAge(200) 进行修改
s.getAge() 获取
class Student:
def init(self):
self.__age=__age
创建对象并调用
s=Student()
s.age=10 非私有化属性直接进行修改
print(s.age)
继承:
has a :将定义的一个类作为形参直接用于另一个类中,即类中包含别的类
class Book:
pass
class Person;
def init(self,Book):
pass
is a
父类(基类) 子类
class Person:
def run(self):
…
class Student(Person):
def study(self):
…
s=Student()
s.run()
s.study()
1、init(self): 类的初始化属性的方法,即介绍清楚这个类中有哪些属性
2.、当类中存在继承时,要是需要定义子类的初始化属性,则必须要调用父类的初始化属性 super9().init(self)
多继承:
class A:
pass
class B:
pass
class C(A,B):
pass
多继承中 搜索顺序的查看:
1、D.mro
2、import inspect
print(inspect.getmro(D))
‘’’