Python 包装纸 class

Python wrapper class

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

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

这段代码让我很恼火,个人觉得它真的很难看。

但是,由于我没有在生产环境(或任何其他环境)中接触过wrapper class,所以我不确定是否可以找到上述做法。

请告诉我 ^ 是否正常,如果不正常,请告诉我如何重构这 2 个 classes(完全删除包装器?)或提供一些资源。

到目前为止,我查看了 python 文档和一些与包装器相关的其他帖子 class,但似乎所有 _ getattribute _诸如此类的东西在这里并不适用。

问题是您的示例根本不是包装器 class。它可以被视为抽象基础 class 或混合。在任何一种情况下,我们的想法都是让 class 实现一些功能,但并不打算独立存在。这些类型的 classes 跳过初始化并假设真正的实现 class 正确设置对象是很常见的。

通常,classes 不需要有一个 __init__,但它对于设置实例变量非常有用,所以大多数 classes 都有它们。

在您的例子中,错误命名的 Wrapper 假定实现者将定义 self.modeself.list_to_tree。如果该合同得到满足,它会为您 list_to_strget_tree。可能有多个实现者对 modelist_to_tree 有不同的看法,但他们都将从基础 class.

获得相同的功能