面向对象 多态 类方法 反射 (四)

多态

多态:

指一种类型的事物,拥有多种形态(为了不同的事物调用,产生不同的结果)

作用:

为了在不知道对象具体类型的情况下,同一对象调用方法的规范。

先抽象,再继承

父类:

定制一套统一的规范

子类:

遵循父类的统一的规范。

多态的三种表现形式:

继承父类:耦合度高,程序的可扩展性低

继承抽象类:耦合度极高,程序的可扩展性极低

鸭子类型:耦合度低,程序的可扩展性高

注意:在python中,不会强制子类必须遵循父类的规范,所以出现了抽象类

抽象类

抽象类:

在python内置的模块中,有一个抽象类。

作用:

让子类必须遵循父类的编写规范。

如何实现:

父类需要继承abc模块中,metaclass = abc.ABCMeta;

在父类的方法中,需要装饰上 abc.abstrctmethod

注意:在python中不推荐使用抽象类

注意:子类必须按照父类的编写规范,缺一不可

鸭子类型

鸭子:

不同的对象,只要长得像鸭子,动作像鸭子,那他就是鸭子!鸭子类型是多态的一种表现形式。

作用:

不同对象,先抽象出相同类型的方法,给他们定制一套统一的规范。

所有的类,在定义时都按照统一的规范进行编写。

多态的三种表现形式:

继承父类:耦合度高,程序的可扩展性低

继承抽象类:耦合度极高,程序的可扩展性极低

鸭子类型:耦合度低,程序的可扩展性高

注意:强烈建议推荐使用鸭子类型

class Pig:
    def eat(self):
        print('吧唧吧唧')
    def speak(self):
        print('哼哼哼')
class Cat:
    def eat(self):
        print('幺鸡幺鸡')
    def speak(self):
        print('喵喵喵')
class Dog:
    def eat(self):
        print('添唧添唧')
    def speak(self):
        print('汪汪汪')

类方法

classmethod和staticmethod都是python解释器内置的装饰器。

classmethod:

是一个装饰器,给在类内部定义方法中装饰,将类内部的方法变为’类的绑定方法’。

staticmethod:

静态方法

是一个装饰器,给在类内部定义方法中装饰,将类内部的方法变为’非绑定方法’。

对象的绑定方法:

由谁来调用,由谁来调用,会将谁(对象)当作第一个参数传入。

类的绑定方法:

由类来调用,由谁来调用,会将谁(类)当作第一个参数传入。

非绑定方法:

可以由对象或类来调用,谁来调用都是一个普通的方法(普通函数),方法需要传入几个参数,就得传入几个。

isinstance 与 issubclass

isinstance 与 issubclass 都是内置模块:

isinstance:

判断一个对象是否是另一个类的实例。

如果是,true;如果不是,false;

issubclass:

判断一个类是否是另一个类的子类

如果是,true;如果不是,false;

class Father:
    pass
class Sub:
    pass
class Foo(Sub):
    pass
#print(isinstance(FOo,Sub))
#print(issubclass(Sub,Father))

反射

反射:指的是通过字符串对 对象的属性进行操作

hasatter:通过字符串判断对象的属性或方法是否存在。

getatter:通过字符串获取对象的属性或方法。

setatter:通过字符串设置对象的属性或方法。

delatter:通过字符串删除对象的属性或方法。

注意:反射的四个方法都是内置的

posted @ 2019-11-28 15:39  Mr-Allen  阅读(123)  评论(0编辑  收藏  举报