文章目录
多态
多态:
指一种类型的事物,拥有多种形态(为了不同的事物调用,产生不同的结果)
作用:
为了在不知道对象具体类型的情况下,同一对象调用方法的规范。
先抽象,再继承
父类:
定制一套统一的规范
子类:
遵循父类的统一的规范。
多态的三种表现形式:
继承父类:耦合度高,程序的可扩展性低
继承抽象类:耦合度极高,程序的可扩展性极低
鸭子类型:耦合度低,程序的可扩展性高
注意:在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:通过字符串删除对象的属性或方法。
注意:反射的四个方法都是内置的