Python,调用对象上传递的函数

Python,调用对象上传递的函数,python,Python,[编辑] 谢谢大家的帮助。这确实产生了一个答案,我已经标出了正确的答案 [编辑] 我为这个仓促提出的问题道歉。我试图表达我的问题所在,代码片段是作为我试图做的事情的抽象而编写的。我已经添加了a的一个子对象,我需要能够调用属性aThing上的anotherFunc以及a的本机函数 我有一个类,a,函数func()。我有一个正在不断重新初始化的实例 class B(object): def __init__() : self.aThing = A() def foo

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

[编辑] 我为这个仓促提出的问题道歉。我试图表达我的问题所在,代码片段是作为我试图做的事情的抽象而编写的。我已经添加了a的一个子对象,我需要能够调用属性aThing上的anotherFunc以及a的本机函数

我有一个类,a,函数func()。我有一个正在不断重新初始化的实例

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上调用它?

不完全清楚,但您可能需要:

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
这将对新的
A
实例调用
func
,该实例使用函数名和。但是,请注意以下注意事项:

  • 根据定义,
    A.func
    实际上没有任何参数(同样,包括
    self
  • 不清楚
    B.foo
    args
    参数是单个参数还是位置参数的元组(通常使用-
    *args
    );及
  • anArg
    来自哪里

    • 如果我理解正确,您可能正在寻找:

      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
      参数!输出:


      有趣的一行是:
      a函数(self.aThing,args)
      。要理解其工作原理,请记住
      aThing.func(args)
      实际上与
      A.func(aThing,args)

      您的意思是说只对新创建的
      A
      调用
      func
      ?请记住传递
      self
      参数<代码>def foo(self…)仅在新创建的A上是。感谢tobias!这正是我想要的。
      func called on foo ['some', 'stuff']