Ответ
@ shx2 работает, но расточительно / неловко создает одноразовый объект Super
только для инициализации нового объекта Regular
с его атрибутом a
.
Если у вас есть контроль над источником Super
, вы можете заставить метод from_b
создать экземпляр данного подкласса, и вместо этого подкласс должен вызвать метод from_b
в своем методе __new__
, так что объект Regular
может быть создан и инициализируется напрямую:
class Super:
def __init__(self, a):
self.a = a
@classmethod
def from_b(cls, b):
obj = super().__new__(cls)
cls.__init__(obj, b.to_a())
return obj
class Regular(Super):
def __new__(cls, b):
return super().from_b(b)
, так что следующие утверждения пройдут:
from unittest.mock import Mock
obj = Regular(Mock())
assert type(obj) is Regular
assert obj.a.to_a.is_called()