init 后自动调用类函数

Automatically calling class function after init

提问人:atskdev 提问时间:8/28/2023 最后编辑:shaik moeedatskdev 更新时间:8/28/2023 访问量:32

问:

我想自动执行一个类方法,该方法将在完成后立即调用。__init__

例如,

class A:
    def __init__(self):
        initialization statement
    def post_init(self):
        #this should be automatically called after completion of __init__ function.
        some statement

我怎样才能做到这一点?

python-3.x python类

评论

0赞 shaik moeed 8/28/2023
调用 里面 ,但是如果你没有传递任何额外的参数 ,为什么不能使用里面的所有语句?self.post_init()__init__.post_init__init__
0赞 atskdev 8/28/2023
post_init()是一个耗时的函数,需要一段时间才能完成。并且该类将作为属性实例化到另一个类中。因此,如果我在 init() 中使用它,那么在两个方法都完成执行之前,我无法实例化该类。
0赞 atskdev 8/28/2023
我想要的是实例化类,然后调用第二个函数。init()
0赞 shaik moeed 8/28/2023
是否要在后台调用第二个函数,并在后台任务完成后调用依赖函数?
0赞 Giacomo Catenazzi 8/28/2023
这有关系吗?如果你实例化并且你不能等待post_init完成,我假设你正在做多线程,但你有一个不完整的类,所以你可能会有错误。通常你只有一个状态,并在每次函数调用时进行检查。如果需要,您可以执行 post_init()。(这个技巧用在这种慢的情况下:只在需要时做工作)__is_fully_initialized

答:

0赞 warownia1 8/28/2023 #1

如果你想在之后自动运行这个类和所有继承类,你需要弄乱如何使用元类实例化对象。默认情况下,当你使用它的类时,会调用 a 来创建一个新对象,然后调用该对象的方法。您希望将 添加到该序列中post_init__init____call__A()__new____init__post_init

class MyMetaclass(type):
  def __call__(cls, *args, **kwargs):
    new_obj = type.__call__(cls, *args, **kwargs)
    new_obj.post_init()
    return new_obj

class A(metaclass=MyMetaclass):
  def __init__(self):
    print('init called')

  def post_init(self):
    print('post init called')

您可以验证

>>> A()
init called
post init called
<__main__A at 0x7f3988e2c6a0>