首页 > 解决方案 > 从python中的排序列表调用继承类的新方法

问题描述

我创建了一个从列表继承的新类。我有一个 mysum() 的新方法。你能帮我在对这样的列表进行排序后调用 mysum() 吗?

class MyList(list):
    def mysum(self):
        sum = 0
        for i, e in enumerate(self):
            sum += i*e
        return sum
    
    def sort(self):
        self.sort()             # ??
        return self             # ??

if __name__ == "__main__":
    ml = MyList([5, 3, 4, 1])
    print(ml.mysum())           # 1*3 + 2*4 + 3*1, OK
    print(ml.sort().mysum())    # 1*3 + 2*4 + 3*5, Doesn't work with RecursionError:

标签: pythoninherited

解决方案


您需要调用该super方法。您所做的是进行递归调用(它一遍又一遍地调用相同的排序方法)。

class MyList(list):
    def mysum(self):
        return sum(i*e for i, e in enumerate(self))

    def sort(self):
        super().sort()
        return self

除此之外,这似乎不是很好地使用继承。如果您想使用多种类型的可迭代对象,那么这将变得很困难。我将 mysum 定义为一个函数,然后使用标准的排序方法:

def mysum(data):
    return sum(i*e for i, e in enumerate(data))


if __name__ == "__main__":
    ml = [5, 3, 4, 1]
    print(mysum(ml))
    print(mysum(sorted(ml)))

推荐阅读