python的类是什么_python类的三大特征

继承

--子类继承父类的数据属性和函数属性

派生:子类衍生出新的东西

什么情况用组合?什么情况用继承?

继承有两种含义

1. 继承基类的方法,并且做出自己的改变或扩张(代码重用)

2. 声明某个子类兼容某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法

接口继承

import abc

class All_file(metaclass=abc.ABCMeta):

@abc.abstractmethod

def read(self):

pass

@abc.abstractmethod

def write(self):

pass

class Disk(All_file):

def read(self):

print(‘disk read‘)

def write(self):

print(‘disk write‘)

class Cdrom(All_file):

def read(self):

print(‘cdrom read‘)

def write(self):

print(‘cdrom write‘)

class Mem(All_file):

def read(self):

print(‘mem read‘)

def write(self):

print(‘mem write‘)

继承顺序

类属性查找顺序深度优先和广度优先

当类是经典类时,多继承会按照深度优先查找

当类是新式类时,多继承会按照广度优先查找

python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)元组,这个MRO元组就是一个简单的线性顺序表。

为了实现继承,python会在MRO元组上从左到右查找基类,直到找到第一个匹配这个属性的类为止。

而这个MRO元组的构造是通过一个C3线性化算法来实现的。合并所有父类的MRO元组并遵循如下san三条准则

1.子类会先于父类被检查

2.多个父类会根据他们在元组中的顺序被检查

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

子类中调用父类的方法

父类名.方法(self)

class Vehicle:

Country=‘China‘

def __init__(self,name,speed,load,power):

self.name=name

self.speed=speed

self.load=load

self.power=power

def run(self):

print(‘开动啦‘)

print(‘开动啦‘)

class Subway(Vehicle):

def __init__(self,name,speed,load,power,line):

Vehicle.__init__(self,name,speed,load,power)

self.line=line

def show_info(self):

print(self.name,self.speed,self.load,self.power,self.line)

def run(self): Vehicle.run(self)

print(‘%s %s 线,开动啦‘ %(self.name,self.line))

line13=Subway(‘北京地铁‘,‘10km/s‘,1000000000,‘电‘,13)

line13.show_info()

line13.run()

supper()方法子类调用父类中的方法

classVehicle1:

Country=‘China‘

def __init__(self,name,speed,load,power):

self.name=name

self.speed=speed

self.load=load

self.power=powerdefrun(self):print(‘开动啦‘)print(‘开动啦‘)classSubway(Vehicle1):def __init__(self,name,speed,load,power,line):#Vehicle.__init__(self,name,speed,load,power)

#super().__init__(name,speed,load,power) #super(__class__,self).__init__(name,speed,load,power)

super(Subway,self).__init__(name,speed,load,power)

self.line=linedefshow_info(self):print(self.name,self.speed,self.load,self.power,self.line)defrun(self):#Vehicle.run(self)

super().run()print(‘%s %s 线,开动啦‘ %(self.name,self.line))

line13=Subway(‘北京地铁‘,‘10km/s‘,1000000000,‘电‘,13)

line13.show_info()

line13.run()print(line13.__class__)

原文地址:https://www.cnblogs.com/douya2010/p/9787169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值