Python只调用一次_init__;()方法

Python只调用一次_init__;()方法,python,init,Python,Init,有没有办法只调用一次类的init()方法。或者,当我从类创建对象时,如何禁用调用init()?init方法将始终被调用,但是您可以创建另一个名为run()的方法或其他方法,您可以选择在创建对象后调用该方法 foo = ClassName() foo.run() # replacement for __init__ foo2 = ClassName() 没有直接的方法来禁用\uuuu init\uuuu,但是有几种方法可以解决这个问题。其中一个有一面旗帜: class Class: _

有没有办法只调用一次类的init()方法。或者,当我从类创建对象时,如何禁用调用init()?

init方法将始终被调用,但是您可以创建另一个名为run()的方法或其他方法,您可以选择在创建对象后调用该方法

foo = ClassName()
foo.run() # replacement for __init__

foo2 = ClassName()

没有直接的方法来禁用
\uuuu init\uuuu
,但是有几种方法可以解决这个问题。其中一个有一面旗帜:

class Class:
    _init_already = False
    __init__(self):
        if not Class._init_already:
            ...
            Class._init_already = True
但这很难看。您真正想要完成的是什么?

如果您想要一个单例,其中一个类只有一个实例,那么您可以创建一个装饰器,如下所示:

试一试:

>>> a = MyClass()
>>> b = MyClass()
>>> a == b
True

您不应该在
\uuuu init\uuuu()
中放入任何只想运行一次的内容。每次创建类的实例时,都会运行
\uuuu init\uuuu()


如果您想自定义类的创建,您应该考虑创建一个。基本上,这允许您定义一个函数,该函数在第一次定义类时只运行一次。

您的意思是您想要一个单例?
\uuuu init\uuu
在对象构造时总是被调用。这就是它的目的。如果您试图只调用一次,那么您的逻辑可能存在缺陷。如果您发布您想要实现的目标,我们可能会帮助您找到更正确的解决方案
\uuuuu init\uuuu
的目的是在创建类实例时触发。请更具体地说明您在这里尝试执行的操作。我认为他希望避免使用
Foobar()。\uuu init\uuu(…)
。这是您第一次创建对象时希望运行的操作,然后再也不会运行,还是您希望在创建类时运行的操作?如果是后者,请尝试查看元类。下面的答案是对元类的一个很好的介绍:
>>> a = MyClass()
>>> b = MyClass()
>>> a == b
True