2020-03-27

学习笔记之三十六

‘’’
多继承:一个子类继承多个父类
多继承时的调用查询顺序:
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))

‘’’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值