好的,所以我试图完成的任务有点密集,在这里完全发布,但我写了一个例子,显示了我想要做的事情。
import random
class Dog:
def __init__(self, height, weight, length, age):
self.Height = height
self.Weight = weight
self.Length = length
self.Age = age
def getAge(self):
return self.Age
## the real version would have a lot more methods that return the
## stats for this object
def getStatMean(doggies, statCall):
output = 0.0
for dog in doggies:
output += dog.statCall()
output /= float(len(doggies))
return output
if(__name__ == "__main__"):
doggies = []
for i in range(0, 100):
doggies.append(Dog(10, 20, 30, random.random()*10))
print getStatMean(doggies, Dog.getAge)
基本上我的问题是我有一个对象列表。这些对象都有大量的stat调用,我希望以相同的方式操作(在这种情况下计算均值,但实际的例子更复杂)。
这样做的最简单方法是为对象拥有的每个方法编写一个getStatMean函数,但是当我向对象添加越来越多的方法时,这开始变得失控。我希望能够将方法名称传递给一个函数,并调用在每个对象上传递的方法名称,如示例所示。
当我尝试运行上面发布的代码段时,我得到了
回溯(最近一次调用最后一次):文件“example.py”,第39行,in print getStatMean(doggies,Dog.getAge)getStatMean中的文件“example.py”,第26行 output + = dog.statCall()AttributeError:Dog实例没有属性'statCall'
我想在python中做什么,或者我是以错误的方式处理这个问题?
答案 0 :(得分:1)
首先:实例的方法被命名为方法,因为它们实际上是绑定函数这意味着python会自动将它传递给它们第一个param,这是一个实例,你打电话给他们。因此,如果您是从课程中获取方法,您必须自己提供此 self 。 并且只使用没有类的功能。 所以电话应该是这样的:
output += statCall(dog)