Python学习:面向对象2
上节复习:
- 面向对象
- 类:具有相同属性和方法的一类事物
- 类名可以实例化一个对象
- 类名可以调用类属性(静态属性和动态属性(方法))
- 对象—实例
- 对象名:调用对象属性,调用方法。
- 什么叫抽象:从小到大的过程。
- 组合:什么有什么
-
将一个类的对象当做另外一个类的属性
继承:什么是什么
1. 从一个大范围到小范围的过程
2. 为什么要用继承:减少代码的重用性
3. 子类有的方法就用子类的,不会调用父类的方法
4. 如果要在子类中调用父类的方法:super,类名
- 派生
- 父类没有的子类有了(派生的属性和派生的方法)
接口和抽象(继承小进阶)
接口类:接口不能被实例化,并且接口类中的不要实现,约束继承接口类的子类必须实现被abstractmethod装饰的方法。
from abc import ABCMeta,abstractmethod class Payment(metaclass = ABCMeta): #metaclass --> 元类 @abstractmethod#父类相当于标杆,子类必须和父类的一致 def pay(self,money):pass class Applepay(Payment): def pay(self,money): print('apple pay 支付了%s'%money) class Alipay(Payment): def pay(self,money): print('支付宝 支付了%s'%money) class Wechatpay(Payment): def fuqian(self,money): print('微信支付了%s'%money) def payment(pay_obj,money): pay_obj.pay(money)
抽象类:抽象类不能被实例化,从小范围到大范围,几个子类的父类有相同的功能需要被实现的时候就用抽象类。
from abc import ABCMeta,abstractmethod class Animal(metaclass=ABCMeta): @abstractmethod def eat(self): print('打开粮食的袋子') print('放一个吃饭的碗') print('把粮食倒在碗里') @abstractmethod def sleep(self): pass class Dog(Animal): def eat(self): super().eat() print('dog is eating') def sleep(self): print('dog is sleeping')
接口类与抽象类的对比:
接口类:
- 接口类支持多继承(子类都不父类固定住了,不支持多继承怎么办)
- 几个子类有相同的功能,但是实现各不相同的时候就用接口类
- 在Python中默认是没有的
- 在接口类中的方法不能被实现
抽象类:
1. 抽象类只支持单继承
2. 几个子类的父类有相同的功能需要被实现的时候就用抽象类
3. 在Python中是默认有的
4. 父类的方法子类必须实现
5. 抽象类内的方法可以被简单实现
原则
抽象类最好不要用多继承,而接口类可以
多继承
新式类:广度优先
经典类:深度优先
与命名空间相关,深度优先会一路网上找,如果在object中,广度优先会把所有的都找个遍。
多态与多态性
多态
class Animal def eat(self):pass class Cat(Animal):pass class Dog(Animal):pass class Pig(Animal):pass
水:冰,水雾,水
多态性
class Animal:pass class Cat(Animal): def eat(self): print('cat eat') class Dog(Animal): def eat(self): print('dog eat') def eat_func(a): a.eat() c = Cat() eat_func(c) d = Dog() eat_func(d)
静态多态性
[1,2,3]+[3,4,5]
'123'+'456'
12+6
序列:有序的数据集合
python自带多态:
1.同一类事物的不同状态
2.操作的时候不需要关心这个对象的数据类型,只要去用就可以了。
总结:
略

浙公网安备 33010602011771号