Python包装类

时间:2015-03-04 16:44:20

标签: python code-conversion

我已经接触过python大约2年了,直到今天我才看到类似的东西,我从未使用或遇到过包装类:

class Wrapper(object):
  def list_to_str(self, my_list):
    if self.mode == 'convert':
      return str(my_list)

  def get_tree(self, my_list)
      my_tree = self.list_to_tree(my_tree)
     return my_tree

class RealClass(Wrapper):

  def __init__(self, mode):
    self.mode = mode
  
  def list_to_tree(self, list):
       ""convert list to tree""
       return tree

我对此代码感到非常恼火,并且个人认为它非常难看。

但是,因为我没有在生产环境(或任何其他环境)中暴露于包装类,所以我不确定是否找到了上述实践。

请告诉我^是否正常,如果没有,请告诉我应该如何重新考虑这两个类(完全删除包装?)或为我提供一些资源。

到目前为止,我查看了python文档以及与包装类相关的其他一些帖子,但似乎所有_ getattribute _和类似的东西并不适用于此处。

1 个答案:

答案 0 :(得分:1)

问题是你的例子根本不是包装类。它既可以被视为抽象基类,也可以视为混合基类。在任何一种情况下,我们的想法是拥有一个实现某些功能的类,但不打算单独使用。这些类的类通常会跳过初始化,只是假设一个真正的实现类正确设置了对象。

通常,类不需要__init__,但它对设置实例变量非常有用,因此大多数类都有它们。

在您的情况下,错误命名的Wrapper假定实现者将定义self.modeself.list_to_tree。如果该合同得到满足,则会为您list_to_strget_tree。可能有多个实现者对modelist_to_tree有不同的看法,但他们都会从基类中获得相同的功能。