2014-06-08 107 views
0

我正在創建一個Python類來表示地理位置。它的主要目標是存儲latitude, longitude, elevation,所以它將非常類似於C#「struct」,一個在運行時應該有很多實例的值類型。python類中的方法數量是否會影響性能?

我正在考慮向該類中添加一些方法(__str__就是其中之一),我想知道向類中添加方法是否會對性能產生任何影響。

性能指標,我感興趣的是以下幾點:

  • 對象創建開銷;
  • 內存開銷(當創建大量實例時)
  • 即使未調用「額外方法」,類的操作速度也是如此。

例如,我閱讀,因爲在默認情況下__dict__屬性結束了吃的每個實例上一些空間__slots__是在某些情況下是有用的。

所以闕的問題是:

哪些影響應該,如果我有大量的方法的類存在嗎?

或者講務實:

是增加更多的方法來那應該是輕量級的東西,我應該儘量避免以任何理由一類?

回答

2

什麼性能你擔心?記憶?屬性訪問?您需要更清楚地定義您的參數。

方法只是另一種屬性;如果實例未定義屬性,則查找將通過實例落入類對象。查找現有實例屬性並不真正受到類*上可用的屬性的影響。

由於方法是該類的屬性,因此內存性能並未真正受其影響;你可以有1000或10000個實例,並且這個類仍然只有一個方法。

如果你關心內存性能,你應該使用slots作爲你的對象。插槽不會使屬性訪問速度更快,它們只能在存儲器佔用空間上保存

因此,要總結:

  • 方法不影響屬性的情況下查找性能。 instance.latitude訪問不會更快或更慢,因爲類有一個額外的方法。

  • 方法不影響內存性能;類對象包含方法,而不是實例。如果您擔心內存佔用,請使用__slots__作爲屬性。


* 從技術上講,Python不查找數據描述符的類,總是在尋找的屬性時。由於類屬性由字典支持,平均而言,這是一種O(1)常數時間查找。您必須創建一個災難性的散列衝突鏈,以此來影響性能。有關詳細信息,請參閱descriptor howto

+0

謝謝,我編輯了這個問題,它偶然涵蓋了您已經指出的主題。現在感謝! – heltonbiker

相關問題