[英]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.