Python创建一系列文本菜单-类/对象还是装饰函数?
我正在用Python创建一系列文本菜单。Python约定告诉我,我应该只为需要维护和操作的数据成员创建类/对象。我不确定……下面的内容是否合适,还是创建一个基本功能,然后根据哪个菜单进行装饰更好Python创建一系列文本菜单-类/对象还是装饰函数?,python,object,menu,decorator,Python,Object,Menu,Decorator,我正在用Python创建一系列文本菜单。Python约定告诉我,我应该只为需要维护和操作的数据成员创建类/对象。我不确定……下面的内容是否合适,还是创建一个基本功能,然后根据哪个菜单进行装饰更好 class Menu(object): def __init__(self): # Ideally, self._options would be an empty dict for the base class. # This is just for the sake o
class Menu(object):
def __init__(self):
# Ideally, self._options would be an empty dict for the base class.
# This is just for the sake of example.
self._options = {'a': self.optionA,
'b': self.optionB}
def handle_options(self, option):
if option not in self._options:
print "Invalid option"
# re-draw
return
self._options[option]()
def optionA(self):
print "option A"
def optionB(self):
print "option B"
class SubMenu(Menu):
def __init__(self):
Menu.__init__(self)
self._options = {'c': self.optionC,
'd': self.optionD}
def optionC(self):
# ...
def optionD(self):
# .
..实现这一点的方法是使用一个只提供行为的
菜单
基类,例如显示自己、下拉菜单、将附加菜单弹出到右侧、隐藏自己等
然后让子类包含每个菜单实例的实际数据。Python仍然是一种面向对象的语言。因此,对抽象
菜单类进行子类化是很好的。坚持简单。我认为没有理由装饰一个功能。这就是继承的目的。现在我想了想,对于子类,我不需要子类来继承父类的选项,因为它们是不同的。这是浪费效率的明智之举吗?在这种情况下,带装饰器的函数会更好吗?好吧,面向对象编程的一部分是,这正是子类重新定义方法及其行为时发生的情况。这没有什么问题,当然也不应该是低效的。但是,如果子类必须定期重新定义其父类的方法,则可能存在设计问题。OOP最好的特性之一是它促进了代码的重用。并不是说修饰符没有用处,尤其是在Python中。