ОП пишет в комментарии: «Мета не должна рассматриваться как класс». Если это так, то есть, если Django может выжить, когда Meta
действительно , а не класс (очень большое «если»), тогда возможно удовлетворить действительно странное желание ОП избежать самого простого решение (просто обернуть stqticfunction
вокруг lambda
в вопросе).
По сути, это требует написания (довольно странного) мета -класса, который генерирует объект, в котором поиск атрибутов обходит обычное использование классом объектов дескрипторов (каждая функция является объектом дескриптора : то есть у него есть метод __get__
, который Python обычно использует при поиске атрибута в классе или его экземпляре).
Общая идея этого абсурдного движения была бы примерно такой ...:
class MetaNotAClass(type):
def __new__(mcl, clasname, bases, clasdict):
if bases:
usedict = {}
else:
usedict = clasdict
usedict['__foo'] = clasdict
return type.__new__(mcl, clasname, bases, usedict)
def __getattr__(cls, atname):
try: return getattr(cls, '__foo')[atname]
except KeyError: raise AttributeError, atname
class NotAClass:
__metaclass__ = MetaNotAClass
class Bah(NotAClass):
def f(): return 'weird!'
print Bah.f()
Конечно, все, что ожидает от Bah
до , будет , класс сломается (но тогда вы действительно говорите, что "на самом деле это не должно рассматриваться как класс", так что это в основном то, что вы просите: сломать любой код, который считает, что означает «быть увиденным как класс»! -).