如果创建包装器类,则它将与其他任何内置类一起使用。这称为“包含和委派”,它是继承的一种常见替代方法:
class SuperDuperWrapper(object): def __init__(self, origobj): self.myobj = origobj def __str__(self): return "SUPER DUPER " + str(self.myobj) def __getattr__(self,attr): return getattr(self.myobj, attr)
该
__getattr__方法会将SuperDuperWrapper对象上的所有未定义属性请求委托给包含的myobj对象。实际上,考虑到Python的动态类型,您可以使用此类来SuperDuper’ly包装几乎所有内容:
s = "hey ho!"sds = SuperDuperWrapper(s)print sdsi = 100sdi = SuperDuperWrapper(i)print sdi
印刷品:
SUPER DUPER hey ho!SUPER DUPER 100
在您的情况下,您将从无法修改的函数中获取返回的对象,并将其包装在您自己的SuperDuperWrapper中,但是您仍然可以以其他方式访问它,就像它是基础对象一样。
print sds.split()['hey', 'ho!']



