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)