2010-03-09 56 views
0

希望這是一個簡單的問題。如果我有一個對象,我想調用一個方法,這是更好的方法,A或B?對象上的Python方法 - 哪個更好?

class foo(object): 
    def bar(): 
     print 'bar' 

# approach A 
f = foo() 
f.bar() 

# approach B 
foo().bar() 
+3

在哪方面比較好? – domruf 2010-03-09 14:30:00

+4

這似乎不是一個有效的類定義。你的「自我」在哪裏? – SilentGhost 2010-03-09 14:36:23

+3

'TypeError:bar()不需要參數(給出1)' – Amarghosh 2010-03-09 15:02:31

回答

2

如果你唯一的目的是呼籲bar()一個foo對象上,B是好的。

但是,如果您實際上計劃稍後對該對象執行某項操作,則必須使用A作爲B,因爲B不會留下任何對創建對象的引用。

+1

可以使用@staticmethod裝飾器而不是B?看起來像一個更好的解決方案。 – Phil 2010-03-09 14:33:40

+1

@Phil:更好的是什麼?是的,如果你需要的話,你可以使用'@ staticmethod'。目前尚不清楚你是否需要它。 – SilentGhost 2010-03-09 14:39:08

2

A更具可讀性。

所以,A :)

1

方法B不保留物體。如果法巴()返回自我,那麼你可以這樣寫:

 
f = foo().bar() 

個人而言,我喜歡的方法A.雖然我已經開始做setter函數,爲了把它們連回自己在一起,就像上面 - 我不認爲其他人認爲pythonic。

+2

當stdlib方法的指針與返回值無關時,即使返回self可讓您鏈接和輸入較少,Python stdlib也會返回None而不是self。例如:'list.sort'。所以不行。我真的不認爲你可以稱之爲pythonic,儘管什麼是或不是pythonic都不是客觀的。 – 2010-03-09 14:53:20