面向对象编程之多态与绑定非绑定

一、多态

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

猜你喜欢

转载自www.cnblogs.com/caoyu080202201/p/12677381.html