fork(1) download
  1. class Base:
  2. def open(self): pass
  3. def read(self): pass
  4.  
  5. class A(Base):
  6. def read(self): pass
  7.  
  8. class B(Base):
  9. def read(self): pass
  10.  
  11. class Mixin:
  12. def feature(self): pass
  13.  
  14. class Proxy(Base):
  15. def __init__(self, item, mixin):
  16. self.item = item
  17. self.mixin = mixin
  18.  
  19. def __getattribute__(self, name):
  20. try:
  21. return getattr(item := object.__getattribute__(self, '__dict__')['item'], name)
  22. except AttributeError:
  23. return getattr(object.__getattribute__(self, '__dict__')['mixin'], name).__get__(item)
  24.  
  25. for Item in (A, B):
  26. item = Item()
  27. item = Proxy(item, Mixin)
  28. assert isinstance(item, Base)
  29. assert item.open.__func__ is Base.open
  30. assert item.read.__func__ is Item.read
  31. assert item.feature.__func__ is Mixin.feature
Success #stdin #stdout 0.03s 9512KB
stdin
Standard input is empty
stdout
Standard output is empty