[编辑] 谢谢大家的帮助。这确实产生了答案,我已经标出了正确的答案。
[编辑] 我为这个匆忙提出的问题道歉。我试图表达我的问题是什么,代码片段是作为我想要做的事情的抽象而写的。我添加了一个新的A子对象,我需要能够在属性aThing上调用anotherFunc,以及A的本机函数。
我有一个类A,函数func()。我有一个正在重新初始化的A实例。
class B(object):
def __init__() :
self.aThing = A()
def foo(aFunction, args):
self.aThing = A()
self.aThing.aFunction(args)
def bar() :
self.foo(A.func, anArg)
def bam()
self.foo(A.aThing.anotherFunc)
class A(object) :
def __init__() :
self.aThing = C()
def func() :
doSomething
class C(object):
def anotherFunc()
doAnotherThing
x = B()
x.bar()
x.bam()
如何传递函数func以便在新初始化的对象self.aThing上调用它?
答案 0 :(得分:2)
如果我理解正确,你可能正在寻找:
class B(object):
def foo(self, aFunction, args):
self.aThing = A("foo")
aFunction(self.aThing, args)
def bar(self) :
self.foo(A.func, ["some", "stuff"])
class A(object):
def __init__(self, name):
self.name = name
def func(self, args) :
print "func called on", self.name, args
x = B()
x.bar()
请注意所有self
个参数,those are important!输出:
func called on foo ['some', 'stuff']
有趣的是:aFunction(self.aThing, args)
。要了解其工作原理,请记住aThing.func(args)
实际上与A.func(aThing, args)
相同。
答案 1 :(得分:1)
目前还不完全清楚,但您可能需要:
class B(object):
def __init__(self): # note 'self' argument
self.aThing = A()
def foo(self, aFunction, args): # and here
self.aThing = A()
getattr(self.aThing, aFunction)(args)
def bar(self): # and here
self.foo("func", anArg) # note string of function name
这将在新的func
实例上调用A
,它使用函数的名称和getattr
访问它。但请注意以下警告:
A.func
实际上没有任何参数(同样,包括self
); args
的{{1}}参数是单个参数还是位置参数元组(通常使用它是B.foo
);和*args
来自哪里?