我正在使用WxPython--一个用于Python的GUI库。该库的几乎所有属性都通过getter和setter(例如Frame.GetName
或Panel.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
这种设计模式是否常见?我应该坚持使用吸气剂和吸气剂吗?
答案 0 :(得分:1)
如果您愿意,还可以在子类中为基类的getter / setter添加属性。属性非常Pythonic,但性能不是很高。此外,当你必须像__getattr__
那样做魔术时,它们不能很好地工作,但我经常使用它们。
避免它们的唯一真正原因是,如果他们混淆了用户 - 例如,因为他没有预料到的事情发生变化,或者因为他们花费了大量的执行时间。