DÜZENLEME: Evet, yapabilirsiniz; ancak hile yapmanız gerekir: Şu anda çalışan sınıf adı çağrı yığınında mevcuttur ve traceback
modül yığına erişmenize izin verir.
>>> 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'
Ancak bunu yapmazdım; Orijinal cevabım, çözüm olarak hala kendi tercihimdir. Orijinal cevap:
Muhtemelen en basit çözüm, Ned'in meta sınıfları içeren cevabına benzer, ancak daha az güçlü olan bir dekoratör kullanmaktır (dekoratörler kara büyü yapabilir, ancak metasınıflar eski, gizli kara büyü yeteneğine sahiptir )
>>> 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'
>>>