Python,调用对象传递函数

时间:2014-07-10 15:01:35

标签: python

[编辑] 谢谢大家的帮助。这确实产生了答案,我已经标出了正确的答案。

[编辑] 我为这个匆忙提出的问题道歉。我试图表达我的问题是什么,代码片段是作为我想要做的事情的抽象而写的。我添加了一个新的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上调用它?

2 个答案:

答案 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来自哪里?