2013-01-03 181 views
0

Possible Duplicate:
Class method differences in Python: bound, unbound and static我們可以在這個python類聲明中調用foo嗎?

class A: 
    def foo(): 
     print 'hello world' 
    def foo1(self): 
     self.foo() 

a = A() 
a.foo1() 

我一直在尋找使用一些功能,這是私人的那類。我想唯一的辦法是按照慣例:在該函數名稱前面加一個'_',並且仍然有第一個參數爲self

但是foo()完全沒用?

+0

你可以用'a.foo.im_func'從綁定的方法中獲取函數 - 但要做到這一點的正確方法是使其成爲'@ staticmethod'。 – katrielalex

回答

0

嘗試撥打A.foo()。它會輸出'hello world'

請注意,這隻適用於Python 3,因爲在Python 2中它會產生一個TypeError

+0

哦不,不會。 TypeError:必須用一個實例調用unbound方法foo()... etc – Spacedman

+0

那麼它肯定能在Python 3中工作,因爲我自己嘗試了它 – Volatility

+0

是的,但首先你必須將'print'語句改成一個函數,所以發佈的代碼不起作用。 – Duncan

2

對於所有重要的用途,是的。你可以通過方法上的各種屬性來獲得原始函數,但在類中有類似的東西仍然沒有意義。

>>> A.foo.im_func() 
hello world 
0

是的,它幾乎沒用。在Python 2.x中,調用它而不拋出異常的唯一方法是從類的內部提取函數,然後調用它。在Python 3.x中(假設你轉換了print),你可以直接調用A.foo()

如果foo()確實不需要參數self,那麼它不需要是一個方法:只需在定義類的同一個模塊中使其成爲函數即可。

相關問題