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

元类:

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

  能够创造不同寻常的类。

    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中处处是多态

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

鸭子类型:

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

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

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

 

posted @ 2019-04-02 15:17  msKk1  Views(147)  Comments(0Edit  收藏  举报