2018-07-20-Python全栈开发day28-描述符应用与类的装饰器-part3

1.元类介绍

    所谓元类,就是产生类的类,元类的实例就是类,对元类进行实例化,也就产生了元类

   

class Foo:
    pass

print(type(Foo))
==
<class 'type'>#是由类type产生

2.声明自己的元类

  

class Deco:
    def __init__(self,a,b,c):#元类必须有四个参数
        pass

class Foo(metaclass=Deco):
    pass


print(type(Foo))
===
<class '__main__.Deco'>#是由deco产生的实例

3. 自定义元类

  自定义的元类,inint会有四个参数,在进行实例化(产生类)的时候,加上括号就调用了call函数,利用call方法来实现实例化,

  

class Func(type):#为什么要说明这个类是继承于type的呢?
                    #这样的话就是自定制,而不是自定义,只是对某种功能进行了改写
    def __init__(self, name, father, dict):
        pass

    # self.name=name#此时的self是Test这个类
    # self.father=father
    # self.dict=dict
    def __call__(self, *args, **kwargs):
        obj = object.__new__(self)  # 由self也就是Test生成一个新的对象,最后肯定是return  obj
        # 生成了之后,肯定是要对obj做什么事情,给obj赋值
        self.__init__(obj, *args, **kwargs)  # 由self也就是test类来生成一个实例
        return obj


class Test(metaclass=Func):
    def __init__(self, name):
        self.name = name


# Test规定了metaclass,这样test就是由func实例化而来,在Test()的时候,会调用类的call方法,也就是Func的call方法
# 目的:通过call方法,来完成Test的一个实例

p1 = Test('alex')  # 分析
# Test(‘alex’),首先调用call方法,需要生成一个新的对象,来赋给p1
print(p1.__dict__)

 

转载于:https://www.cnblogs.com/hai125698/p/9344647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值