Supponiamo di avere una classe come questa:
class Foo(object):
# some code here
Come succede, Foo
è un singleton. Esistono numerosi modi per scrivere singleton in Python, ma la maggior parte di loro non mi sembra davvero molto pitone. Se qualcun altro ha una ragione particolarmente valida per creare istanze o sottoclassi della mia classe, non vedo alcun motivo per non rendere le cose irragionevolmente difficili per loro (oltre a un minimo "questo non fa parte dell'API pubblica e potrebbe rompere tutto" suggerimento).
Quindi mi sono imbattuto in questa idea:
def singleton(cls):
return cls()
@singleton
class foo_instance(object): # note lower case
# some code here
Ho dovuto scrivere singleton()
perché operator.call()
non è una cosa per qualche strana ragione.
Ovviamente, puoi ancora fare type(foo_instance)
e creare istanze manualmente, ma la mancanza di una classe visibile pubblicamente rende evidente (per me) che non sei supposto per farlo (più o meno allo stesso modo in cui non dovresti scherzare con type(enum.Enum)
in 3.4+), e penso che sia più pulito di una classe "privata" con prefisso sottolineato come class _Foo
.
Questo è un modo ragionevole per fare una lezione singolare?