python类的三大特征

Posted douya2010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()方法子类调用父类中的方法

class Vehicle1:
    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(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=line
        def show_info(self):
            print(self.name,self.speed,self.load,self.power,self.line)
        def run(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__)

 



以上是关于python类的三大特征的主要内容,如果未能解决你的问题,请参考以下文章

python的三大特征

python 面向对象的三大特征之 继承

面向对象三大特征

python 面向对象的三大特征之 封装

面向对象三大特征是啥?

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)