您可以在那里覆盖__getattr__并添加您的self.object搜索逻辑以查找缺失的属性:
In [12]: class MyClass():
...: def __init__(self, name, obj):
...: self.name = name
...: self.obj = obj
...:
...: def known_function(self, name):
...: return '{}_blabla'.format(name)
...:
...: def __getattr__(self, attr):
...: if attr not in self.__dict__:
...: return getattr(self.obj, attr)
...: return super().__getattr__(attr)
...:
In [13]: m = MyClass('foo', str)
In [14]: m.lower
Out[14]: <method 'lower' of 'str' objects>
In [15]: m.known_function('spam')
Out[15]: 'spam_blabla'
在这里,我们正在检查 是否attr在实例字典中,如果不是,我们从self.obj.
请注意,这将获得任何属性,而不仅仅是一个函数。types.MethodType您可以稍后添加支票。
此外,您在 中引用了该名称,该名称name在known_function本地范围内不存在,您可能打算采用name参数或使用self.name.
编辑:
实际上__getattr__是在属性查找链中最后调用的,因此您可以放弃检查,self.__dict__因为该检查已经完成,所以这样做:
In [16]: class MyClass():
...: def __init__(self, name, obj):
...: self.name = name
...: self.obj = obj
...:
...: def known_function(self, name):
...: return '{}_blabla'.format(name)
...:
...: def __getattr__(self, attr):
...: return getattr(self.obj, attr)
...: