W treści klasy nazwa klasy nie jest jeszcze zdefiniowana, więc nie jest dostępna. Nie możesz po prostu wpisać nazwy klasy? Może powinieneś powiedzieć więcej o problemie, abyśmy mogli znaleźć dla ciebie rozwiązanie.
Utworzyłem metaclass, aby wykonać tę pracę za Ciebie. Jest wywoływany w czasie tworzenia klasy (koncepcyjnie na samym końcu klasy: blok) i może manipulować tworzoną klasą. Nie testowałem to:
class InputAssigningMetaclass(type):
def __new__(cls, name, bases, attrs):
cls.input = get_input(name)
return super(MyType, cls).__new__(cls, name, bases, newattrs)
class MyBaseFoo(object):
__metaclass__ = InputAssigningMetaclass
class foo(MyBaseFoo):
# etc, no need to create 'input'
class foo2(MyBaseFoo):
# etc, no need to create 'input'
do wyjaśnienia, co próbuję zrobić: trzeba utworzyć i zainicjować zmienną klasy, 'input', ** poza metody **. Mam kilka małych klas, z których każda musi wywoływać "get_input", używając jako nazwy parametru swojej klasy. Próbuję to uogólnić, więc nie muszę iść do każdej klasy (będzie ich około 100) i wpisać nazwę klasy. –
OK, zaktualizowałem swoją odpowiedź za pomocą metaklasu, który powinien pomóc. –
Co oznacza 'MyType' w linii' super' w 'InputAssigningMetaclass'? –