根据本文和答案,另一种实现方法是通过自定义元类。这将按以下方式工作(在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!!
基本思想是:
当您调用
MyNewClass()
它搜索元类时,会发现您已定义NewInitCaller
元类
__call__
函数被调用。此函数
MyNewClass
使用创建实例type
,该实例将自己运行
__init__
(打印“ Init类”)。然后,元类将调用
new_init
实例的函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)