一、多态
1、简介:一种实物有多种形态,拿到类里面说,就是某父类有多个子类。
2、作用:多态性,即若要使用某对象的一项父类有的功能,则不用考虑其具体属于哪个子类,因为每个子类都会含有这个功能,等于统一了子类功能的基调。
class Father: def conmmon_func(self): print('Father的功能') class Son_1(Father): def son_1_func(self): super().conmmon_func() print('son_1的功能') class Son_2(Father): def son_2_func(self): super().conmmon_func() # 每个子类的派生功能中必定包含了父类的功能 print('son_2的功能')
3、鸭子类型:不使用多态性,将几个没有共同父类的平级类定义相同功能,此时它们虽然在语法上不属于同一父类,但是实际上它们的对象已经可以统一调用同样的功能了。
4、抽象基类:通过abc模块,给几个子类声明一个抽象父类,抽象父类中若有某功能,子类必须要定义与该功能同名的功能,否则报错。
import abc class Father(metaclass=abc.ABCMeta): @abc.abstractmethod def func(self): print('这是Father的功能') class Son_1(Father): def func(self): print('这是Son_1的功能') class Son_2(Father): def func(self): print('这是Son_2的功能')
二、绑定非绑定
1、绑定给对象的功能:调用者是对象,会将对象作为参数自动传入,默认的功能就是绑定对象功能。
2、绑定给类的功能:调用者是类,会将类作为参数自动传入,需要在功能上一行作声明此功能为绑定类功能。
3、非绑定功能:也称静态功能,无论调用者是对象还是类,都不会自动传参,需要在功能上一行作声明此功能为静态功能。
import setting class Human: def __init__(self, name, age): # 默认的绑定对象功能 self.name = name self.age = age @classmethod # 声明为绑定类功能 def create_obj(cls): return cls(setting.name, setting.age) @staticmethod # 声明为静态功能 def func(): print('hello world')