Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python创建一系列文本菜单-类/对象还是装饰函数?_Python_Object_Menu_Decorator - Fatal编程技术网

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

我正在用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 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中。