python的三大特征
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的三大特征相关的知识,希望对你有一定的参考价值。
参考技术A 第一点:封装隐藏对象的属性和实现细节,仅对外提供公共访问方式,在Python中用双下线开头的方式将属性设置成私有的。
拥有三个好处:将变化隔离,便于使用,提高复用性,提高安全性。
第二点:继承
继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又被称为基类或超类,新建的类称为派生类或子类。即一个派生类继承基类的字段和方法,继承也允许把一个派生类的对象作为一个基类对象对待。
第三点:多态
一种事物的多种体现形式,函数的重写其实就是多态的一种体现。Python中,多态指是父类的引用指向子类的对象。
实现多态的步骤:
1. 定义新的子类;
2. 重写对应的父类方法;
3. 使用子类的方法直接处理,不调用父类的方法;
多态的好处:
1. 增加了程序的灵活性;
2. 增加了程序的可扩展性。
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的三大特征的主要内容,如果未能解决你的问题,请参考以下文章