Предположим, у меня был класс А:
class A:
def __init__(self, x, y):
self.x = x
self.y = y
def sum(self):
return self.x + self.y
И я определил фабричный метод с именем factory
:
def factory(x, y):
class B: pass
b = B()
setattr(b, 'x', x)
setattr(b, 'y', y)
B.__name__ = 'A'
return b
Теперь, если я сделаю print(type(A(1, 2)))
и print(type(factory(1, 2)))
, они покажут, что это разные типы. И если я попытаюсь сделать factory(1, 2).sum()
, я получу исключение. Но type(A).__name__
и type(factory(1, 2)).__name__
эквивалентны, и если я сделаю A.sum(factory(1, 2))
, я получу 3, как если бы я звонил, используя A
. Итак, мой вопрос таков:
Что мне нужно сделать, чтобы factory(1, 2).sum()
работал без определения sum
для B или наследования?