To pytanie nie dotyczy dyskusji, czy pożądany jest wzór singletonu , jest anty-wzorem, czy jakiejkolwiek wojny religijnej, ale do omówienia, w jaki sposób ten wzór najlepiej wdrożyć w Pythonie w najbardziej pythonowy sposób. W tym przypadku definiuję słowo „najbardziej python”, co oznacza, że jest ono zgodne z „zasadą najmniejszego zdziwienia” …
Używam Django, który pozwala ludziom dodawać dodatkowe parametry do klasy za pomocą class Meta. class FooModel(models.Model): ... class Meta: ... Jedyne, co znalazłem w dokumentacji Pythona, to: class FooMetaClass(type): ... class FooClass: __metaclass__ = FooMetaClass Jednak nie sądzę, że to jest to samo.
Mam znajomego, który lubi używać metaklas i regularnie oferuje je jako rozwiązanie. Jestem zdania, że prawie nigdy nie musisz używać metaklas. Czemu? ponieważ myślę, że jeśli robisz coś takiego z klasą, prawdopodobnie powinieneś robić to z obiektem. Konieczne jest małe przeprojektowanie / refaktoryzacja. Możliwość korzystania z metaklas spowodowała, że wiele …
W Pythonie mogę utworzyć metodę klasy za pomocą @classmethoddekoratora: >>> class C: ... @classmethod ... def f(cls): ... print(f'f called with cls={cls}') ... >>> C.f() f called with cls=<class '__main__.C'> Alternatywnie, mogę użyć normalnej (instancji) metody na metaklasę: >>> class M(type): ... def f(cls): ... print(f'f called with cls={cls}') ... …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.