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.mode
和 self.list_to_tree
。如果该合同得到满足,它会为您 list_to_str
和 get_tree
。可能有多个实现者对 mode
和 list_to_tree
有不同的看法,但他们都将从基础 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.mode
和 self.list_to_tree
。如果该合同得到满足,它会为您 list_to_str
和 get_tree
。可能有多个实现者对 mode
和 list_to_tree
有不同的看法,但他们都将从基础 class.