Python 中 __init__() 方法只调用一次
有没有办法让一个类的 init() 方法只被调用一次?或者我该如何在创建类的对象时禁用 init() 的调用?
4 个回答
1
你不应该在 __init__()
里放那些只想运行一次的东西。每次你创建一个类的实例时,__init__()
都会被执行。
如果你想自定义类的创建过程,可以考虑创建一个 元类。简单来说,这样可以让你定义一个只在类第一次被定义时运行的函数。
2
没有直接的方法可以禁用 __init__
,但是有一些变通的方法可以解决这个问题。其中一种方法是使用一个标志:
class Class:
_init_already = False
__init__(self):
if not Class._init_already:
...
Class._init_already = True
不过这样看起来不太好。你到底想要实现什么呢?
7
如果你想要一个单例,也就是说这个类只会有一个实例,那么你可以像下面这样创建一个装饰器,这个例子来自于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