最近我一直在做這樣的事情:代碼風格 - 「隱藏」功能之外的功能裏面
import Tkinter
class C(object):
def __init__(self):
self.root = Tkinter.Tk()
def f():
print 'hello'
self.button = Tkinter.Button(master=self.root, command=f, text='say hello')
,而不是像這樣:
import Tkinter
class C(object):
def __init__(self):
self.root = Tkinter.Tk()
self.button = Tkinter.Button(master=self.root, command=self.f, text='say hello')
def f(self):
print 'hello'
的問題是不特定到Tkinter,但這是一個很好的例子。功能f
僅用作該按鈕的回調,因此我選擇在__init__
內定義它。這樣,只有__init__
內的代碼甚至知道f
的存在 - 外部範圍不會開始混淆名稱,並且用戶不需要關心設計爲內部方法的負載。
我的問題是:這是否被視爲好風格?我很擔心,因爲我有一個有很多按鈕的GUI類 - __init__
開始看起來很長,有很多本地函數定義。有沒有更合適的選擇,我應該使用?
當然,你是對的,但在我的例子的實際版本中,'f'不僅僅是'print'hello''。它不適合lambda函數。 –
@poorsod - 如果它沒有使用實例,那麼它不應該是一個方法。你可以使它成爲一個模塊級別的函數,或者你可以像現在一樣繼續這樣做,但是如果你不需要函數中的實例,我不會在這裏使用一個方法(甚至是一個靜態方法)。 – mgilson
@mgilson:我想你會錯過這個問題的重點,即回調是否應該是非本地功能。您在Tkinter回調中經常看到lambda的原因是將本地參數綁定到回調函數。回調通常在其他地方定義。 –