如果创建包装器类,则它将与其他任何内置类一起使用。这称为“包含和委派”,它是继承的一种常见替代方法:
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 sds
i = 100
sdi = SuperDuperWrapper(i)
print sdi
印刷品:
SUPER DUPER hey ho!
SUPER DUPER 100
在您的情况下,您将从无法修改的函数中获取返回的对象,并将其包装在您自己的SuperDuperWrapper中,但是您仍然可以以其他方式访问它,就像它是基础对象一样。
print sds.split()
['hey', 'ho!']