我想创建现有包的类的子类(我不想/不能更改其源代码)。该类的对象仅使用字符串进行初始化,然后使用各种add函数进行填充。一个最小的示例可能如下所示(没有任何add功能):
import copy
class Origin(object):
def __init__(self, name):
self.name = name
self.dummy_list = [1, 2, 'a']
self.dummy_stuff = {'a': [12, 'yt']}
def make_copy(self):
return copy.deepcopy(self)
def dummy_function(self):
return len(self.dummy_list)
我想创建一个子类,以便我可以使用Origin. 一个简单的方法是
class BasedOnOrigin(Origin):
def __init__(self, origin_instance, new_prop):
Origin.__init__(self, origin_instance.name)
self.dummy_list = copy.deepcopy(origin_instance.dummy_list)
self.dummy_stuff = copy.deepcopy(origin_instance.dummy_stuff)
self.new_prop = new_prop
烦人的事情是,我需要复制所有我需要提前知道的东西。
另一种选择是
class BasedOnOrigin2(Origin):
def __init__(self, origin_instance, new_prop):
Origin.__init__(self, origin_instance.name)
self = origin_instance.make_copy()
self.new_prop = new_prop
但是这self =部分看起来相当不标准并且new_prop没有设置,所以我需要一个额外的功能。
有这样做的标准方法吗?
上述方法的替代方法是使用例如将附加功能添加到现有实例
from functools import partial
def add_function(obj, func):
setattr(obj, func.__name__, partial(func, obj))
但是如果有 (i) 很多函数要添加和 (ii) 很多实例想要添加函数,这可能会很烦人。