如何解决使用来自另一个模块的方法自动扩展类
想象一下,我已经定义了几个作用于一个对象的方法,并且我有两个或更多不同的类,它们不能从同一个父级继承,有一个实例目的。我想自动将所有方法添加到两个类,删除第一个参数(对象)并将其替换为类拥有的实例。
有办法吗?
我确定我的问题不清楚,所以我尝试给出一个超级简化的设置。为简单起见,对象只是一个列表。我希望在这个例子之后我的目标是明确的!提前感谢您抽出宝贵时间。
# I define some methods acting on an object (just 2 useless methods acting on a list in this example)
def get_avg(input_list):
return sum(input_list) / len(input_list)
def multiply_elements(input_list,factor):
return [i * factor for i in input_list]
然后我们有 2 个不同的类,它们都有一个我们对象的实例(列表)
class A:
list_of_apples = []
def get_list_of_apples(self):
return self.list_of_apples
class B:
"""Totally different class from A(pples),also containing a list"""
list_of_bears = []
def get_list_of_bears(self):
return self.list_of_bears
现在,要在 A 和 B 实例拥有的列表上调用“列表”方法,我需要执行以下操作:
b = B()
get_avg(b.get_list_of_bears())
相反,我的目标是自动定义一些包装器(如下所示),这将允许我直接从 A 和 B 的实例调用列表方法。这里有一个 B 的示例:
class B:
"""Totally different class from A(pples),but containing a list"""
list_of_bears = []
def get_list_of_bears(self):
return self.list_of_bears
def get_avg(self):
return get_avg(self.list_of_bears)
def multiply_elements(self,factor):
return multiply_elements(self.list_of_bears,factor)
使用扩展类,我可以简单地做:
b = B()
b.get_avg()
b.multiply_elements(factor=10)
我想自动扩展 A 和 B。
解决方法
我不知道为什么您的类不能从共同的祖先继承,但我能想到的一种解决方案是动态地创建祖先:
def make_ancestor():
class Temp:
def get_avg(self):
input_list = getattr(self,self.list_name)
return sum(input_list) / len(input_list)
def multiply_elements(self,factor):
input_list = getattr(self,self.list_name)
return [i * factor for i in input_list]
return Temp
class A(make_ancestor()):
list_of_apples = []
list_name = 'list_of_apples'
def get_list_of_apples(self):
return self.list_of_apples
class B(make_ancestor()):
list_of_bears = []
list_name = 'list_of_bears'
def get_list_of_bears(self):
return self.list_of_bears
现在,由于父类是动态生成的,您的子类不会从同一个父类继承。
作为测试:
print(make_ancestor() == make_ancestor()) # False
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。