封装,多态,继承. super的方法,类的约束,
Posted shicongcong0910
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装,多态,继承. super的方法,类的约束,相关的知识,希望对你有一定的参考价值。
1.python的三大特性:
python的三大特性,封装,多态,继承
封装:函数 模块 类 对象
多态 : python中默认支持多态
继承: python中的子类继承父类属性和方法
鸭子类型: 看着像鸭子,它就是鸭子
python中处处都是鸭子
# 两者之间没有任何关系,但是都遵循着一个隐形的标准
两个类中的鸭子类型:
# 优点:1,统一标准,减少了词汇量
# 2,两者之间没有任何耦合性,但是可以产生关系,其中一个的对象可以调用另一个类的方法
# 其他例子 :index pop clear
2. super的用法:
super(A类,self).方法 跳过A类,按照mro的顺序执行下一类的方法 #可以执行非本类方法的方法必须在有继承关系的类中使用 class A: def eat(self): print(‘eat A‘) class B(A): def eat(self): super(B,self).eat() #跳过B类,按照mro的顺序执行0 print(‘eat B‘) obj = B() obj.eat() print(B.mro()) #[<class ‘__main__.B‘>, <class ‘__main__.A‘>, <class ‘object‘>] #查看mro的顺序 类名+ . + mro +()
3. 类的约束:有两种方法
第一种:raise Exception 抛出异常
在父类中定义好子类要有的方法
class Payment: def pay(self,money): raise Exception(‘子类要定义pay的方法‘) class A(Payment): def pay(self,money): #Exception: 子类要定义pay的方法 print(111) class B(Payment): def zhifu(self,money): pass def pay(obj,money): obj.pay(money) obj1 = B() pay(obj1,100)
第二种:抽象类 接口类 :制定一个规范,强制子类必须有pay方法,如果没有,在你实例化的时候就会报错
from abc import ABCMeta,abstractmethod class A(metaclass=ABCMeta): #父类里面的抽象方法,子类一定要实现 @abstractmethod#抽象方法 #强制子类执行eat,chi方法,没有就报错 def eat(self,money): print(111) @abstractmethod def chi(self,money): pass class B(A): def eat(self,money): pass class C(A): def eat(self,money): pass def chi(self,money): print(111) def eat(obj,money): obj.chi(money) obj1 = B() eat(obj1,100)
以上是关于封装,多态,继承. super的方法,类的约束,的主要内容,如果未能解决你的问题,请参考以下文章