python - 从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:
解决方案
您需要调用该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)))
推荐阅读
- c# - 您如何将其转换为迭代函数而不是使用嵌套循环进行递归?
- typescript - 是否可以在另一个 Webpart 中呈现 Webpart
- lua - 停止箭头垃圾邮件
- c - 在子宏中替换父标记
- symfony - Symfony 4 DateType 已被 jquery 禁用但未提交数据
- typescript - 打字稿
tuple 只允许使用参数值:string | forEach 方法上的 BrowserWindow - javascript - 按属性对象将对象数组减少到总数
- saml-2.0 - 在 /Saml2/Acs 点接收 SAML 注销响应
- javascript - 我如何使用 yubico(公钥和私钥)加密和解密文件
- javascript - 将文本移动到父级的合理方法
- 进入新的?