fork 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 __getattr__(self, name):
  20. try:
  21. return getattr(self.__item, name)
  22. except AttributeError:
  23. return getattr(self.__mixin, name).__get__(name)
  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
  32. assert item.__Proxy_item is item
  33. assert item.__Proxy_mixin is Mixin
Success #stdin #stdout 0.03s 9580KB
stdin
Standard input is empty
stdout
Standard output is empty