在带有装饰器的__init__之后注入函数调用

在带有装饰器的__init__之后注入函数调用,第1张

在带有装饰器的__init__之后注入函数调用

根据本文和答案,另一种实现方法是通过自定义元类。这将按以下方式工作(在python 2.7中进行了测试):

# define a new metaclass which overrides the "__call__" functionclass NewInitCaller(type):    def __call__(cls, *args, **kwargs):        """Called when you call MyNewClass() """        obj = type.__call__(cls, *args, **kwargs)        obj.new_init()        return obj# then create a new class with the __metaclass__ set as our custom metaclassclass MyNewClass(object):    __metaclass__ = NewInitCaller    def __init__(self):        print "Init class"    def new_init(self):        print "New init!!"# when you create an instancea = MyNewClass()>>> Init class>>> New init!!

基本思想是:

  1. 当您调用

    MyNewClass()
    它搜索元类时,会发现您已定义
    NewInitCaller

  2. 元类

    __call__
    函数被调用。

  3. 此函数

    MyNewClass
    使用创建实例
    type

  4. 该实例将自己运行

    __init__
    (打印“ Init类”)。

  5. 然后,元类将调用

    new_init
    实例的函数。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5662693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存