Перегрузка __repr__ при динамическом создании класса

Рейтинг: 0Ответов: 1Опубликовано: 23.03.2015

Есть статический метод класса, результат вызова которого возвращает новый класс:

class ClassGetter():
    @staticmethod
    def get(classname):

        attributes = dict() # словарь с атрибутами нового класса
        # присваиваем какие-то атрибуты
        ...
        return type(classname, (Base,), attributes)

Каким образом я могу динамически определить метод repr? Пробовал примерно так:

attributes['__repr__'] = lambda: return getattr(self, name)

Очевидно, не получилось... Как желаемое можно реализовать?

P.S. Base - экземпляр declarative_base SQLAlchemy, так что переопределить у него какие-то методы не совсем здорово...

Ответы

▲ 2Принят

Это не работает, потому что вы забыли передать self в качестве аргумента lambda.

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2015, 3, 23, 11, 43, 42, 798929)
>>> locdate = type("locdate", (datetime,), {"__repr__": lambda s: s.strftime("%c")})
>>> locdate.now()
Mon Mar 23 11:49:07 2015