0
定義/訪問指向對象的類中成員變量的方法的正確方法是什麼?訪問指向對象的類中成員變量的方法的正確方法是什麼?
例如,我有一個類Foo
,有一個方法foo_method
:現在
class Foo:
def foo_method(self):
return 'bar'
,另一類Bar
,我想一個對象存儲這個類(我不想Bar
到繼承Foo
)。
什麼是定義類Bar
的正確/推薦的方法?
class Bar:
def __init__(self):
self.foo = Foo()
# OR
class Bar:
def __init__(self):
self.foo = Foo()
def bar_method(self):
return self.foo.bar()
前者將允許我使用:
x = Bar()
x.foo.foo_method()
但是,這個我直接訪問一個成員變量(強耦合)的方法。
我用這種方法看到的好處是:
- 我沒有來包裝被添加到
Foo
類中的每個新方法。 Bar
可能包含更多指向其他類的成員變量。不包括 包裝他們保持Bar
更小和可管理的大小。- 從IDE(PyCharm等)或IPython中的自動補全功能幫助 檢查
bar
像後面的子菜單 (x.foo.foo_method()
,x.bar.foobar()
等),使其更容易開發代碼菜單(x.foo
)。 - 函數式編程的外觀正感覺(不知道這一個贊成或反對)
的缺點是強耦合,不封裝的foo
內部細節等
我想檢查這是一個推薦的做法? 和/或是否有任何與此相關的指導方針(實施複合模式)?
任何輸入/指針將高度讚賞!
我發現你的問題有點難以遵循,因爲有許多實體標記爲「酒吧」(手揮動的Foo類與酒吧方法返回「酒吧」,然後更具體的酒吧類定義,一個尚未另一個條形法)。一點消歧會讓你的問題更清晰恕我直言。 – Erik
謝謝埃裏克。我已經更新了這個問題,並試圖使其更清楚。 – Sharad
這讀起來好多了,謝謝。至於你的問題,對我來說這是一個意見和目標受衆的問題。如果您相信您的調用者知道要做什麼Foo()對象,只需將它們傳給Foo()即可。如果狀態欄保持不變,那麼您將不能複製Foo界面以確保其正確使用。 – Erik