您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

# define a new Metaclass which overrides the "__call__" function
class 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 Metaclass
class MyNewClass(object):
    __Metaclass__ = NewInitCaller
    def __init__(self):
        print "Init class"
    def new_init(self):
        print "New init!!"

# when you create an instance
a = MyNewClass()
>>> Init class
>>> New init!!

基本思想是:

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

元类 __call__函数调用

函数MyNewClass使用创建实例type

该实例将自己运行__init__(打印“ Init类”)。

然后,元类调用new_init实例的函数

其他 2022/1/1 18:28:14 有465人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶