如何通过函数实例在python中调用成员函数?

时间:2016-09-03 06:51:06

标签: python

假设我们有以下代码:

class T(object):
  def m1(self, a):
    ...
f=T.m1

如何在T的实例上调用f?

x=T()
x.f(..)?
f(x, ..)?

2 个答案:

答案 0 :(得分:0)

希望这能解释它!

class T(object):
    def m1(self, a):
        return a
f=T().m1 #must initialize the class using '()' before calling a method of that class
f(1)

f = T()
f.m1(1)

f = T().m1(1)

f = T
f().m1(1)

f = T.m1
f(T(), 1) #can call the method without first initializing the class because we pass a reference of the methods class

f = T.m1
f2 = T()
f(f2, 1)

答案 1 :(得分:0)

成员函数就像任何其他函数一样,除了它将self作为第一个参数,并且有一种机制可以自动传递该参数。

所以,简短的回答是,使用它的方式:

class T(object):
  def m1(self, a):
    pass

f=T.m1

x = T()

f(x, 1234)

未约束方法

这是因为您使用的是T.m1,这是一个"未绑定的方法" 。此处未绑定意味着其self参数未绑定到实例。

>>> T.m1
<unbound method T.m1>

绑定方法

T.m1不同,x.m1为您提供了绑定方法:

>>> x.m1
<bound method T.m1 of <__main__.T object at 0x0000000002483080>>

您可以引用绑定方法并在不明确传递self的情况下使用它:

f2 = x.m1
f2(1234)

使用partial

绑定

你也可以做同等的&#34;绑定&#34; self您自己,使用此代码:

import functools

unbound_f = T.m1
bound_f = functools.partial(unbound_f, x)

bound_f(1234)