• 元类,归一化设计,抽象类


    元类:

      对象是被创造出来的,被类实例化出来的,类也是被创造出来的,是被特殊的方式创造的

      能够创造不同寻常的类。

        1 不能被实例化  

        2 有且只有一个实例

     常规的类特点:

        1 能够被实例化  

        2 具有属性

        3 具有方法

    类= type(对象)

    type = type(类)

      所有的类型,说的都是这个对象是属于哪一个类的

      所有的用class常规语法创造出来的类,都是type类型型

    print(type(Course))
    print(type(int))
    print(type(str))

    归一化设计

      当所有的类中都有一样的方式时,通常使用归一化设计,统一调用

      

    class Wechatpay:
        def __init__(self, name, money):
            self.name = name
            self.money = money
    
        def pay(self):
            print('%s通过微信支付了%s元' % (self.name, self.money))
    
    
    class Alipay:
        def __init__(self, name, money):
            self.name = name
            self.money = money
    
        def pay(self):
            print('%s通过支付宝支付了%s元' % (self.name, self.money))
    
    
    class ApplePay:
        def __init__(self, name, money):
            self.name = name
            self.money = money
    
        def fuqian(self):
            print('%s通过apple pay支付了%s元' % (self.name, self.money))
    
    
    # 归一化设计
    def pay(person):  # 这里就是归一化设计了,上面的类中,都有存在同样的函数方法名,就可以使用归一化设计
        person.pay()
    
    
    wcp = Wechatpay('alex', 2000000)
    pay(wcp)            # 这里 是调用归一化设计的地方,
    ali = Alipay('alex', 2000000)
    
    app = ApplePay('alex', 2000000)
    pay(app)

    抽象类:

      约束子类,规范代码,被abcstractmethod装饰器装饰的函数,在子类中都必须拥有一个名称相同的方法

      

    from abc import ABCMeta,abstractmethod
    class Payment(metaclass = ABCMeta):
        @abstractmethod    # 这里就是装饰器了
        def pay(self):       #这个方法,在这个类的子类中必须存在 
            pass            

    多态:

      在传递参数的时候,如果要传递的对象有可能是多个类的对象

      1 我们又必须在语言中清楚的描述出到第是哪一个类型的独享

      2 我们就可以使用继承的形式,有一个父类作为这些所有可能被传递进来的对象的基类

      3  基础类型就可以写成这个父类

      4 于是所有子类的对象都是属于这个父类的

      在python中,因为要传递的对象的类型在定义阶段不需要明确,所以我们在Python中处处是多态

      数据的类型不需要通过继承来维护统一

    鸭子类型:

      多个相似的类具有相同的方法名

      但是又不通过抽象类或者继承父类约束的

      这几个具有相同方法的类就是鸭子类型

  • 相关阅读:
    解决跨域问题的后端解决方案
    java-反射
    验证接口实现类对于接口中所有方法是否都要重写?
    完成Triangle时遇到的问题
    刚知道的一种算法
    完成ATM编程练习题时遇到的问题
    完成Account编程练习遇到的问题
    完成StopWatch编程练习题时遇到的一些问题
    Window环境下Java备份和恢复Mysql数据
    IDEA导入项目不下载依赖问题
  • 原文地址:https://www.cnblogs.com/mk-lovefreedom/p/10642808.html
Copyright © 2020-2023  润新知