簡體   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