2009-12-01 45 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