簡體   English   中英

如何通過函數實例在python中調用成員函數?

[英]how to call a member function in python by its function instance?

假設我們有以下代碼:

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

如何在T的實例上調用f?

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

希望這能解釋它!

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)

成員函數就像任何其他函數一樣,除了它將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綁定

您也可以使用以下代碼self完成等效的“綁定” self

import functools

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

bound_f(1234)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM