所有类方法调用元素的方法
我有一个类,叫做A。
class A:
def __init__(self, ele):
self.ele = ele
如果我调用A.fun(),我希望它能变成self.ele.fun()。
我不能用继承,因为我不知道ele的构造函数。
在ele
里面有很多函数,所以我不能一个一个单独写每个函数。
2 个回答
0
我怕你不能直接从A类的对象调用ele的方法,除非你让A类继承它。因为A类本身没有这些方法。除非你知道ele的默认方法名称,并为它们创建调用者。
方法1:
class Ele:
def fun(self):
print("this is fun")
class A:
def __init__(self, ele):
self.ele = ele
def fun(self):
self.ele.fun()
ele=Ele()
a = A(ele)
a.fun()
方法2:
class Ele:
def fun(self):
print("this is fun")
class A(Ele):
def __init__(self):
pass
a = A()
a.fun()
2
你可以定义一个 __getattr__
方法,作为对 self.ele
的一个包装,这样所有未定义的属性访问都会转发到 self.ele
上。需要注意的是,这种代码模式被称为定义一个代理对象:
class A:
def __init__(self, ele):
self.ele = ele
def __getattr__(self, name):
return getattr(self.ele, name)
这样:
print(A('foo bar').split())
输出结果是:
['foo', 'bar']