EDYCJA: Tak, możesz; ale musisz oszukiwać: nazwa aktualnie uruchomionej klasy jest obecna na stosie wywołań, a traceback
moduł umożliwia dostęp do stosu.
>>> import traceback
>>> def get_input(class_name):
... return class_name.encode('rot13')
...
>>> class foo(object):
... _name = traceback.extract_stack()[-1][2]
... input = get_input(_name)
...
>>>
>>> foo.input
'sbb'
Jednak nie zrobiłbym tego; Moja pierwotna odpowiedź to nadal moje własne preferencje jako rozwiązanie. Oryginalna odpowiedź:
prawdopodobnie najprostszym rozwiązaniem jest użycie dekoratora, który jest podobny do odpowiedzi Neda obejmującego metaklasy, ale mniej potężny (dekoratorzy są zdolni do czarnej magii, ale metaklasy są zdolne do starożytnej, okultystycznej czarnej magii)
>>> def get_input(class_name):
... return class_name.encode('rot13')
...
>>> def inputize(cls):
... cls.input = get_input(cls.__name__)
... return cls
...
>>> @inputize
... class foo(object):
... pass
...
>>> foo.input
'sbb'
>>>