2008-09-30 118 views
3

我一直在研究一個非常簡單的塔式發電機。我想出了一些檢查檢查以下劃線開頭的屬性可以嗎?

SomeClass._sa_class_manager.mapper.c 

它是確定檢查這種(或叫用下劃線begining方法)?我總是認爲這是合法的,儘管它嚴重依賴於類/對象的內部結構。但是,嘿,因爲python在Java中並沒有真正的接口,所以它可以。

回答

8

這是故意的(在Python中)沒有「私人」範圍。這是一個慣例,任何以下劃線開頭的東西都不應該被理想地使用,因此如果它的行爲或定義在下一個版本中發生變化,您可能不會抱怨。

0

如果有效,爲什麼不呢?儘管_sa_class_manager得到重構,將自己綁定到此特定版本的SQLAlchemy,或者創建更多工作來跟蹤更改,但您可能會遇到問題。由於SQLAlchemy是一個快速移動的目標,你可能已經在一年之內。

最好的方法是將你想要的API集成到SQLAlchemy本身。

8

通常,這通常表示該方法是有效的內部方法,而不是文檔化界面的一部分,不應該依賴於該方法。未來版本的庫可以自由重命名或刪除這些方法,所以如果您關心未來的兼容性而不必重寫,請避免這樣做。

0

這通常不是一個好主意,因爲已經提到的原因。但是,如果沒有其他方式做某事,Python會故意允許這種行爲。例如,如果您有一個封閉源代碼編譯的Python庫,其中作者認爲您不需要直接訪問某個對象的內部狀態—,但您確實可以執行—,那麼仍然可以獲取有關您的信息需要。你遇到與之前提到的相同的問題,以跟上不同的版本(如果你足夠幸運,它仍然保持),但至少你可以做你想做的事情。

相關問題