python中的元类编程的理解

   python是一门动态的语言,动态语言的精髓在于可以在运行期间,创建类,通过类创建对象,进而通过对象调用方法和属性。元类即是创建类的类,我们可以通过用type的来创建类,故而type就是元类。但是为什么要有元类呢,它有什么作用吗,其实元类的作用就是控制一个类的初始化过程。我们在python3中可以通过元类来控制一个类的初始化过程,具体的初始化步骤,我会用代码进行演示。

1 使用type创建类

# coding=utf-8

def say(self):
    return "hello world"


class baseClass:
    def answer(self):
        return "hello"

if __name__ == "__main__":
    #创建类的过程type的第一个参数表示类的名称,第二个是元组表示继承类,第三个参数是字典表示的是属性和方法
    son = type("son", (baseClass,), {"age": 10, "say": say})
    sn = son()
    print(sn.say())
 

2 用元类的作用

  其实上面的代码你看不出来他的任何作用,这是因为,在python3中,使用元类的目标都是控制创建对象之前的一些检查,如果不符合预期则直接抱出异常,这种方式更加的优雅,并且python天生就支持这种检查,具体代码如下,对于创建一个类如果你规定类中必须有某个函数如果某个函数不存在则不予创建,这种需求的话,则使用如下方式更加优雅。

# 定义元类为CheckParamer并且继承type表示自己是一个元类
class CheckParamer(type):

    # 控制Father类实例化的过程,可以添加自定义逻辑对father的一些属性和方法做校验,如果这些参数都符合条件则创建对象,不符合则抱出异常
    def __new__(cls, *args, **kwargs):
        #检查father类中是否有say函数
        if "say" not in args[2]:
            raise ValueError("say must be contain")
        return super().__new__(cls, *args, **kwargs)


# 将Father类的元类设置为CheckParamer
class Father(metaclass=CheckParamer):

    def __init__(self, name):
        self.name = name

    def say(self):
        return "123"

    def __str__(self):
        return "Father"







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值