我使用的现有模块包含一个类,该类具有带字符串参数的方法,其形式为:
existing_object.existing_method("arg1")
或
existing_object.existing_method("arg1:arg2")
参数采用分层结构。 我想创建一个模块,它对参数进行客观化,并使它们成为导入模块类的方法,使得use看起来像这样:
my_object.arg1.my_method()
或
my_object.arg1.arg2.my_method()
my_method()会调用existing_method(),同时将“arg1:arg2”作为参数传递给它。
如果有人能指出我正确的方向开始,我会很感激。
答案 0 :(得分:3)
您可以使用返回特殊方法调用者实例的自定义__getattr__
执行此操作:
class MethodCaller(object):
def __init__(self, args, parent):
self.args = args
self.parent = parent
def __getattr__(self, name):
return MethodCaller(self.args + (name,), self.parent)
def my_method(self):
return self.parent.existing_method(':'.join(self.args))
class MyClass(object):
def __getattr__(self, name):
return MethodCaller((name,), self)
def existing_method(self, arg):
print arg
示例:
>>> MyClass().arg1.my_method()
arg1
>>> MyClass().arg1.arg2.my_method()
arg1:arg2
>>> MyClass().foo.bar.my_method()
foo:bar
答案 1 :(得分:0)
更清楚地思考这一点我意识到我真正想要的是能够使用模块的IPython内省来导航层次结构。这意味着我只需要创建这样的对象:
class Foo():
def __init__(self, arg):
self.arg = arg
def my_method(self.arg)
arg1 = Foo("arg1")
arg1.arg2 = Foo("arg1:arg2")