Czy można uzyskać nazwę klasy w treści definicji klasy?Python nazwa klasy w klasie body
Na przykład
class Foo():
x = magic() # x should now be 'Foo'
wiem, że mogę to zrobić statycznie zewnątrz ciała za pomocą metody klasy Klasa:
class Bar():
@classmethod
def magic(cls):
print cls.__name__
Bar.magic()
jednak nie jest to, czego chcę, chcę, nazwa klasy w klasie body
Nie można tego zrobić w Pythonie 2, ale metadlasy '__prepare__' w Pythonie 3 pozwala dodać nazwę do słownika klasy zanim rozpocznie się wykonywanie klasy klasy (skąd można z niej skorzystać) –
Czy możesz opisać, w jaki sposób chcesz go użyć? Wydaje się to trochę bezsensowne, ponieważ możesz napisać Foo .__ name__ zamiast magic(). W pewnym kontekście może istnieć lepsze rozwiązanie. – viraptor
@Rosh Oxymoron, myślę, że jest to możliwe, może nie być eleganckie lub wydajne lub co chcesz, ale tak długo, jak można modyfikować AST w czasie wykonywania, możesz zrobić, co chcesz ... – GaretJax