Близнецы берутся из fsspec< /code> и находятся вне моего контроля, но это так.
Код: Выделить всё
class Base:
def open(self): pass
def read(self): pass
class A(Base):
def read(self): pass
class B(Base):
def read(self): pass
Мой код получает этот экземпляр и должен передать его в другую библиотеку, ожидающую подкласс Base >. Но я хочу добавить к этому экземпляру еще одну функцию (не такую, которая будет полезна вне моего кода).
На мой взгляд, моя функция будет представлять собой метод миксин.
Код: Выделить всё
class Mixin:
def feature(self): pass
Код: Выделить всё
for Item in (A, B):
item = Item()
item.__class__ = type("Item", (item.__class__, Mixin), {})
assert isinstance(item, Base)
assert item.open.__func__ is Base.open
assert item.read.__func__ is Item.read
assert item.feature.__func__ is Mixin.feature
- "Используйте фабрику для динамического создания экземпляра соответствующего класса вместо создания базового экземпляра и последующего объединения его в производный."
- "Используйте __new__ или другие механизмы, чтобы перехватить конструкцию."
Подробнее здесь: https://stackoverflow.com/questions/790 ... thing-else