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')

 

接口类与抽象类的对比: 
接口类:

  1. 接口类支持多继承(子类都不父类固定住了,不支持多继承怎么办)
  2. 几个子类有相同的功能,但是实现各不相同的时候就用接口类
  3. 在Python中默认是没有的
  4. 在接口类中的方法不能被实现

抽象类: 
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.操作的时候不需要关心这个对象的数据类型,只要去用就可以了。

总结:

posted @ 2017-08-17 17:17  最咸的咸鱼  阅读(213)  评论(0)    收藏  举报