所有类方法调用元素的方法

-1 投票
2 回答
69 浏览
提问于 2025-04-14 18:01

我有一个类,叫做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']

示例: https://ideone.com/7H9tT5

撰写回答