2012-09-11 92 views
-1

在构建Foo类的实例之前,我想创建一个Foo类中定义的方法的实例方法对象,并将其分配给一个变量。然后我将创建一个Foo类的实例,并通过该变量针对新创建的实例执行实例方法对象。这是可行的吗?如果是这样,怎么样?谢谢。是否有可能基于关联类创建一个实例方法对象?

+0

呃?对不起,我真的很难解析你的问题。有什么方法可以用不同的方式来描述它吗?也许用一个例子来说明它? –

+0

恭喜,你创造了新纪录! *四个* *不同*您的问题的解释导致许多答案!我计算一个classmethod,一个绑定方法别名,一个未绑定方法引用和一个独立函数。 –

+1

@MartijnPieters - 不完全是4. larsmans和我自己发布的答案几乎完全相同(并且在大约3秒钟内发布)......说到这一点,我想我会删除我的......(so我想这只会使* 3不同的解释* ...不知道这是否使它从记录断路器,虽然;) – mgilson

回答

3

我希望我的理解正确,你想是这样的:

>>> class Foo(object): 
...  def __init__(self, msg): 
...   self.msg = msg 
...  def speak(self): 
...   print(self.msg) 
...  
>>> tell_me = Foo.speak 
>>> tell_me(Foo("hello!")) 
hello! 

是的,这是可能的。 Foo.speak是一个未绑定的方法,它是一个可调用的(函数),可以将实例作为其第一个参数传递,以获得您从绑定方法(例如Foo("hello").speak)获得的相同行为。

+1

+1实际解释它... – mgilson

+0

@larsmans - 你的回答正是我所看到的。感谢您理解我的问题,并抱歉不让我的问题更清楚。 – tamakisquare

0

你的意思是这样的:

class Foo: 
    def __init__(self): 
     self.g = self.f 

    def f(self): 
     print "foo" 

foo = Foo() 
foo.g() 

请纠正我,如果我误解。

0

在Python中,实例方法只是方便调用并传递self作为第一个参数的函数。你应该可以这样做:

def bar(self): 
    pass 

class Foo(object): 
    pass 

x = bar 
f = Foo() 
bar(f) 
相关问题