2009-12-01 80 views
4

從Python使用Qt窗口小部件的常用方式似乎是對它們進行子類化。PyQt子類化

Qt小部件類有很多方法,所以不可避免地我最終會在子類中添加一個方法,其名稱與從Qt小部件繼承的相同。在Python中,所有的方法都是虛擬的,所以我擔心的是一些Qt代碼最終可能會調用我的方法而不是預期的Qt - 在最壞的情況下,打破一些不容易顯示的邊界情況在測試中。

另一方面,也許所有的PyQt方法都只是C++代碼的封裝,當然這些方法不會受到我在Python子類化方面所做的任何事情的影響。

任何人都知道這是什麼情況?

回答

3

如果底層的C++方法是虛擬的,那麼覆蓋它們的Python方法將在任何時候被C++代碼調用它們調用。如果它們只是常規方法,任何C++代碼都會默認調用原始的C++方法(儘管Python代碼會調用Python方法,因爲它會看到Python對象,並且所有方法都是「虛擬」的)。

+0

啊,PyQt那麼遠?當然,如果你想重寫一個Qt方法,這是一個好消息,但是如果你不這樣做的話會產生壞消息。那麼,更好的做法是委託而不是子類? – rwallace 2009-12-01 20:33:14

+0

如果你不想重寫,請給它一個不同的名字。順便說一下,代表什麼意思? – Macke 2009-12-01 21:02:25

+0

爲什麼不只是通過PEP 8進行操作並將所有方法命名爲小寫字母/下劃線? Qt使用camelCase,所以你不會有任何衝突...除了可能的單字方法名稱... – 2009-12-01 21:58:14