在继承

时间:2015-08-01 19:43:39

标签: python properties wxpython

我正在使用WxPython--一个用于Python的GUI库。该库的几乎所有属性都通过getter和setter(例如Frame.GetNamePanel.SetBackgroundColour)处理。对于它的Python 3端口(名为Phoenix)也是如此。 WxPython提供的小部件通常用于子类化它们并覆盖它们的getter和setter。该库还提供了创建新小部件的类,我现在正试图创建一个小部件。

问题是:用属性替换这个getter / setter模式是否可以?毫无疑问,它可以做到,但我应该这样做吗?这将产生以下冲突:

  • 我添加到子类(或我制作的小部件)的属性将是属性类
  • 我没有覆盖的那些将保留为吸气剂和制定者
  • 用户必须在上述两种情况之间切换。

以下是一个例子:

# Say, I made a widget called FancyButton. Here's the aftermath:
mybutton = FancyButton()
mybutton.SetLabel("Quack") # This is legacy code from superclass
mybutton.hover_colour = "Blue" # This is new code with property style

这种设计模式是否常见?我应该坚持使用吸气剂和吸气剂吗?

1 个答案:

答案 0 :(得分:1)

如果您愿意,还可以在子类中为基类的getter / setter添加属性。属性非常Pythonic,但性能不是很高。此外,当你必须像__getattr__那样做魔术时,它们不能很好地工作,但我经常使用它们。

避免它们的唯一真正原因是,如果他们混淆了用户 - 例如,因为他没有预料到的事情发生变化,或者因为他们花费了大量的执行时间。