Chciałbym automatycznie uruchamiać kod podczas tworzenia klasy, który może wywoływać inne metody klasy. Nie znalazłem sposobu, aby to zrobić z samej deklaracji klasy i ostatecznie utworzyłem @classmethod
o nazwiei wywołałem ją z zakresu definicji zaraz po deklaracji klasy. Czy istnieje metoda, którą mogę zdefiniować w taki sposób, że zostanie automatycznie wywołana po utworzeniu obiektu klasy?Wywołanie metody klasy po utworzeniu klas Pythona
5
A
Odpowiedz
10
Możesz to zrobić, używając metaclass lub class decorator.
Klasa dekorator (od 2.6) jest prawdopodobnie łatwiejsze do zrozumienia:
def call_clsinit(cls):
cls._clsinit()
return cls
@call_clsinit
class MyClass:
@classmethod
def _clsinit(cls):
print "MyClass._clsinit()"
metaclasses są bardziej skuteczne; mogą wywoływać kod i modyfikować składniki klasy przed jej utworzeniem, jak również później (również mogą być dziedziczone):
def call_clsinit(*args, **kwargs):
cls = type(*args, **kwargs)
cls._clsinit()
return cls;
class MyClass(object):
__metaclass__ = call_clsinit
@classmethod
def _clsinit(cls):
print "MyClass._clsinit()"
+2
Dodałbym, że przynajmniej z tekstu pytania trudno jest stwierdzić, dlaczego "__new__" lub "__init__" nie dają sobie rady. –
Powiązane problemy
- 1. Wywołanie metody klasy podstawowej Pythona: nieoczekiwane zachowanie
- 2. Wywołanie metody klasy w after_save
- 3. Wywołanie wirtualnej metody natychmiast po zakończeniu budowy
- 4. std :: wątek wywołanie metody klasy
- 5. Android Studio nie może znaleźć klas biblioteki po utworzeniu Gradle
- 6. Wywołanie zastąpiona metody z klasy bazowej
- 7. java wywołanie metody z innej klasy
- 8. Wywołanie super metody z poziomu super klasy
- 9. Wywołanie metody klasy bazowej z metody przeciążonej w podklasie
- 10. Wywołanie metody klasy bazowej z konstruktora pochodnego
- 11. Mylące klasy i wywołanie metody w OpenCart
- 12. Błędy po utworzeniu apk
- 13. Symfony3 ClassNotFoundException po utworzeniu wiązki
- 14. Wywołanie metody instancji prywatnej z metody klasy w Ruby
- 15. AS3: wywołanie metody klasy statycznej - nazwy klas i metod są łańcuchami
- 16. Jak zamknąć przeglądarkę po utworzeniu klasy C# WebClient?
- 17. Wywołanie metody klasy wywołania klasy podczas debugowania w środowisku Eclipse
- 18. Wywołanie metody onSearchRequested po naciśnięciu szkła powiększającego
- 19. Wywołanie Pythona z Objective-C
- 20. Wywołanie metody Force base
- 21. Wyśmiewać wywołanie metody ogólnie
- 22. Symlink zepsute zaraz po utworzeniu
- 23. Jak utworzyć dekorator klas Pythona, który jest w stanie objąć metody instancji, klasy i statyczne?
- 24. Gdzie mogę znaleźć metody i atrybuty klas wbudowanych Pythona?
- 25. Metody klas a metody instancji
- 26. NSManagedObject zachowują licznik jest 2 po utworzeniu
- 27. Wywołanie metody ogólnej/delegata z nietypowej klasy bazowej
- 28. rozrządu na wywołanie metody
- 29. Wywołanie Pythona z C++
- 30. Jak uzyskać MethodInfo metody interfejsu, po wdrożeniu metody MethodInfo klasy?
Tworzenie klas lub tworzenie instancji? Ponieważ oba można zrobić, ale odpowiedź jest różna w zależności. –
Możesz użyć metaclasses do tego. Zobacz na przykład [to pytanie] (http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python). – BrenBarn
Na marginesie: proszę nie wymyślać '__special_methods__'. Jest to zarezerwowane dla języka Python. Użyj '_jednostki_rezydentów_prefiksu', jeśli chcesz, aby była prywatna. – delnan