python 24 encapsulation, polymorphism

1. encapsulation, polymorphism

Package: code, data space into a container, and may be used.

Polymorphism: a thing can be presented in various forms.

python default support polymorphism, a variable can point to a variety of data types.

2. Ducks type --Duck typing

python advocate duck type (coding ideas).

"Duck typing" like polymorphism, like work, but there is no inheritance.

看起来像“鸭子”,其实就是“鸭子”;
    定义:A、B类没有耦合性,但A、B类里面具有相同的方法,则称A、B互为“鸭子”,在某种意义上统一了标准。
    虽然A、B两个类没有关系,但是统一两个类中相似方法的方法名,在某种意义上统一了标准。
    例如:字符串、列表、元组的index方法,名字相同,作用相似,但不是一个index。

3. Constraints class

# 方法一:python语言惯于使用的一种约束方式,在父类主动抛出错误
# raise Exception("主动报错"),放在父类中,前提是已制定了相应的规则

class Payment:
    def pay(self,money):
        raise Exception("子类要使用pay方法")   # 主动抛出约束错误,如果子类不使用pay方法,报错

class QQpay(Payment):       # 鸭子类型

    def pay(self, money):
        print(f"使用qq支付了{money}")

class Alipay(Payment):

    def pay(self, money):
        print(f"使用阿里支付{money}")

class Wechat(Payment):

    def pay(self, money):
#    def zhifu(self,money):     # 会报错
        print(f"使用微信支付{money}")


def pay(obj, money):
    obj.pay(money)       # 归一化设计:统一接口


obj1 = QQpay()
obj2 = Alipay()
obj3 = Wechat()

pay(obj1, 100)
pay(obj2, 200)
pay(obj3, 300)
# 方法二:借鉴于Java语言,定义抽象类的概念,做到真正的强制约束
# 抽象类、接口类:强制在父类指定规则、规范

from abc import ABCMeta, abstractmethod

class Payment(metaclass=ABCMeta):
    @abstractmethod        # 强制约束错误,当实例化对象时,子类没有pay方法就会报错
    def pay(self,money):
        pass

class QQpay(Payment):       # 鸭子类型

    def pay(self, money):
        print(f"使用qq支付了{money}")

class Alipay(Payment):

    def pay(self, money):
        print(f"使用阿里支付{money}")

class Wechat(Payment):

    def pay(self, money):    # 当没有pay时会报错
        print(f"使用微信支付{money}")


def pay(obj, money):   # 归一化设计:统一接口
    obj.pay(money)


obj1 = QQpay()
obj2 = Alipay()
obj3 = Wechat()

pay(obj1, 100)
pay(obj2, 200)
pay(obj3, 300)

5. super depth analysis

super().方法()
按照self对象从属于类的mro顺序,执行此类的下一个类的方法(跳出本类)。

Guess you like

Origin www.cnblogs.com/yzm1017/p/11324080.html