Задать вопрос
  • Как сделать класс вызываемым?

    @Flash90 Автор вопроса
    ссори,
    class Chel(models.Model):
        name = models.CharField(max_length=10)
    guy = Chel(name='xxx')


    class Meta(type):
        def __call__(self, *args, **kwargs):
            obj = type.__call__(self, *args)
            for name in kwargs:
                setattr(obj, name, kwargs[name])
            return obj

    class A(object):
        __metaclass__ = Meta

    a = A(x=1)
    TypeError: object() takes no parameters
    a = A()(x=1)
    TypeError: 'A' object is not callable

    Решение я нашел, не правильно создавал последний класс :
    A = type.__new__(Meta, 'A', (object,), {})
    #и теперь при создании экземпляров можно определять атрибуты:
    a1 = A(attr1=1, attr2="test")
    print(a1.attr1, a1.attr2) 
    1    test
    Ответ написан
    Комментировать