python 面向对象经典举例_Python之面向对象新式类和经典类

Python之面向对象新式类和经典类

新式类和经典类的继承原理:

在Python3中,就只有新式类一种了。

先看Python3中新式类:

类是有继承顺序的:

Python的类是可以继承多个类的,也就是多继承。

Python的类如果继承了多个类,那么其寻找的方法有两种,分贝为:深度优先 and  广度优先。

当类是经典类时:多继承状态下,按深度优先查找。

当类是新式类时:多继承状态下,按广度优先查找。

广度优先的顺序:不走到头,再走完所有分支的情况下走最后的头。

#新式类的继承,在查找属性时遵循:广度优先#class A(object):#def test(self):#print('from A')#pass#class B(A):## def test(self):## print('from B')#pass#class C(A):## def test(self):## print('from C')#pass#class D(B):## def test(self):## print('from D')#pass#

#class E(C):## def test(self):## print('from E')#pass#class F(D,E):## def test(self):## print('from F')#pass#f1=F()## f1.test()#

## print(F.__mro__)#print(F.mro())

#广度优先:F->D->B->E->C->A->object

MRO:

MRO是一种算法,用于计算在继承过程中,类的继承顺序。

所有父类的MRO列表并遵循如下的三条准则:

1、子类会优先于父类被检查。

2、多个父类会根据他们在列表中的顺序被检查。

3、 如果对下一个类存在两个合法的选择,选择第一个父类。

注意:MRO的用发只有新式类可以用,Python2的经典类是用不了的。

在Python2中的类的新式和经典的区别:

在Python2中的新式类中,最终的父类要写object,而Python3的新式类不用写。

其余的新式类和Python3一致。

Python2中的经典类的继承:

在Python2中的经典类继承是深度优先的查找原则:

#python2中经典类的继承,在查找属性时遵循:深度优先

classA:#def test(self):

#print('from A')

pass

classB(A):#def test(self):

#print('from B')

pass

classC(A):#def test(self):

#print('from C')

pass

classD(B):#def test(self):

#print('from D')

pass

classE(C):#def test(self):

#print('from E')

pass

classF(D,E):#def test(self):

#print('from F')

passf1=F()

f1.test()#F->D->B->A->E->C

Super的用法:

在子类里调用父类的方法是,不要直接去调用,不要用 “类名. 方法” 的方法去调用。

而是用Super的方法。

Super只能用于新式类。

Super函数:

注意:Super函数的参数,第一个类名,一定是自己的类名。

#coding:utf-8#super在python2中的用法:

#1:super(自己的类,self).父类的函数名字

#2:super只能用于新式类

classPeople(object):def __init__(self,name,sex,age):

self.name=name

self.age=age

self.sex=sexdefwalk(self):print('%s is walking' %self.name)classChinese(People):

country='China'

def __init__(self,name,sex,age,language='Chinese'):#self.name=name

#self.sex=sex

#self.age=age

#People.__init__(self,name,sex,age)

super(Chinese,self).__init__(name,sex,age)

self.language=language

c=Chinese('egon','male',18)print(c.name,c.age,c.sex,c.language)########在python3中 ########

classPeople:def __init__(self,name,sex,age):

self.name=name

self.age=age

self.sex=sexdefwalk(self):print('%s is walking' %self.name)classChinese(People):

country='China'

def __init__(self,name,sex,age,language='Chinese'):#self.name=name

#self.sex=sex

#self.age=age

#People.__init__(self,name,sex,age)

super(Chinese,self).__init__(name,sex,age)

self.language=languagedefwalk(self,x):

super().walk()print('子类的x',x)

c=Chinese('egon','male',18)print(c.name,c.age,c.sex,c.language)

c.walk(123)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值