Python 使用来自其他模块的方法自动扩展类

Python 使用来自其他模块的方法自动扩展类,python,decorator,Python,Decorator,我已经定义了几个作用于一个对象的方法,并且我有两个或多个不同的类不能从同一个父对象继承,并且具有该对象的实例。我想自动将所有方法添加到两个类中,删除第一个参数(对象),并将其替换为该类拥有的实例 有办法吗 我确信我的问题不清楚,所以我尝试给出一个超级简化的设置。为了保持简单,对象只是一个列表。我希望通过这个例子,我的目标是明确的!提前感谢您抽出时间 #我定义了一些作用于对象的方法(在本例中,只有两个作用于列表的无用方法) def get_平均值(输入_列表): 返回和(输入列表)/len(输入列

我已经定义了几个作用于一个对象的方法,并且我有两个或多个不同的类不能从同一个父对象继承,并且具有该对象的实例。我想自动将所有方法添加到两个类中,删除第一个参数(对象),并将其替换为该类拥有的实例

有办法吗

我确信我的问题不清楚,所以我尝试给出一个超级简化的设置。为了保持简单,对象只是一个列表。我希望通过这个例子,我的目标是明确的!提前感谢您抽出时间

#我定义了一些作用于对象的方法(在本例中,只有两个作用于列表的无用方法)
def get_平均值(输入_列表):
返回和(输入列表)/len(输入列表)
def乘法元素(输入元素列表,系数):
返回[i*输入列表中i的系数]
然后我们有两个不同的类,都有一个对象的实例(列表)

A类:
苹果列表=[]
def获取苹果列表(自我):
返回self.list\u苹果
B类:
“”“与(pples)完全不同的类,还包含一个列表”“”
熊的列表=[]
def获取熊的列表(自身):
返回self.list\u的\u熊
现在,要对a和B实例拥有的列表调用“list”方法,我需要执行以下操作:

b=b()
获取平均值(b.获取熊的列表()
相反,我的目标是自动定义一些包装器(如下所示),这将允许我直接从A和B的实例调用list方法。这里有一个B的示例:

B类:
“”“与(pples)完全不同的类,但包含列表”“”
熊的列表=[]
def获取熊的列表(自身):
返回self.list\u的\u熊
def get_平均值(自身):
return get_avg(self.list_熊)
def乘法_元素(自身、因子):
返回乘法\u元素(self.list\u的\u熊、因子)
使用扩展类,我可以简单地执行以下操作:

b=b()
b、 获取平均值()
b、 乘以元素(系数=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

因为它们是语义不同的类,所以我不希望有一个共同的祖先,但它们都包含一个复杂的对象,我在一个单独的模块中为其实现了逻辑。我认为在课堂上使用装饰器是可能的,但你的解决方案似乎也很有趣