繁体   English   中英

Python只调用__init __()方法一次

[英]Python call __init__() method only one time

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

如果你想要一个单例 ,那里只有一个类的实例,那么你可以创建一个像PEP18那样的装饰器:

def singleton(cls):
    instances = {}
    def getinstance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return getinstance

@singleton
class MyClass:
    pass

试试看:

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

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

class Class:
    _init_already = False
    __init__(self):
        if not Class._init_already:
            ...
            Class._init_already = True

但这很难看。 你真正想要完成的是什么?

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

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

始终会调用init方法,但是您可以创建另一个名为run()的方法,或者在创建对象后调用的方法,可选。

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

foo2 = ClassName()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM