从 python 中的排序列表调用继承 class 的新方法
call a new method of inherited class from sorted list in python
我创建了一个新的 class 继承自列表。
我有一个新方法 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:
改为
def sort(self):
super().sort()
return self
这将避免递归
您需要调用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)))
我创建了一个新的 class 继承自列表。 我有一个新方法 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:
改为
def sort(self):
super().sort()
return self
这将避免递归
您需要调用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)))