如何在Python中重定向方法调用?

use*_*423 3 python oop

我知道您可以使用__getattr__()该类的属性来访问不存在的属性。然而我想用函数做同样的事情。

我读到Python对待属性和方法是一样的,所以你__getattr__()也使用for方法。这是真的?

class container:
    def __init__(self, data):
        self.data = data

    def __getattr__(self, item):
        ##Don't know the code to put here vv
        result = getattr(self.data, item)


class data:
    def printHello(self):
        print("hello")

    def printString(self, string):
        print(string)

def main():
    someData = data()
    someContainer = container(someData)
    someContainer.printString("sup")

main()
Run Code Online (Sandbox Code Playgroud)

目标:我希望能够编写container.printHello()并让它调用container.data.printHello(). 我还想要一个能够传递参数的解决方案printString()。我该怎么做呢?

注意:这是一种简化。实际上,我有大量方法,在开发程序时我不断添加、删除和更改方法名称

jua*_*aga 6

你几乎已经拥有了,你只需要归还你所拥有的。

class Container:
    def __init__(self, data):
        self.data = data
    def __getattr__(self, attr):
        return getattr(self.data, attr)

class Data:
    def print_hello(self):
        print("hello")

    def print_string(self, string):
        print(string)


Container(Data()).print_hello()
Container(Data()).print_string('foo')
Run Code Online (Sandbox Code Playgroud)