我想將類A
的實例的方法foo
傳遞給另一個函數run_function
。方法foo
將使用其類A
的實例變量。如何將使用實例變量的實例方法作爲參數傳遞給另一個函數?
這裏是一個最小的例子,其中A
的實例變量只是self.a_var
,而foo
只是打印該變量。
class A:
def __init__(self,a_var):
self.a_var=a_var
def foo(self):
print(self.a_var)
class B:
def __init__(self, A):
self.A=A
# EDIT (comment to compile)
self.A.do_something()
def run_function(self):
self.A.foo()
def run_function_2(self, bar):
bar()
myA = A(42)
myA.foo()
# Current implementation
myB=B(myA)
myB.run_function()
# Better(?) implementation
myB.run_function_2(myA.foo)
目前,我A
類的實例myA
傳遞到的B
實例和顯式調用self.A.foo()
。這會強制A
的功能名稱爲foo
。這是愚蠢的。
更好的(?)實現將實例的功能傳遞給run_function2
。這有效,但我不確定這是否「安全」。
問:
有沒有,我不此刻看到任何漏洞?
重要的部分是傳遞的方法foo
需要訪問(它的)類實例的實例變量。那麼,在run_function_2
裏面調用的foo
總是可以訪問所有的實例變量myA
?
有沒有更好的實現方法?
編輯:我忘了補充說,class B
將始終有一個A
的實例,因爲它必須與該實例do_something
。也許這會改變某些東西(?)。抱歉!
澄清,當你說「保存」時,你的意思是「安全」嗎? – Miket25
@ Miket25 Urg,是:/ –