在python中将对象方法传递给外部函数

时间:2016-09-01 23:56:55

标签: python methods

好的,所以我试图完成的任务有点密集,在这里完全发布,但我写了一个例子,显示了我想要做的事情。

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中做什么,或者我是以错误的方式处理这个问题?

1 个答案:

答案 0 :(得分:1)

首先:实例的方法被命名为方法,因为它们实际上是绑定函数这意味着python会自动将它传递给它们第一个param,这是一个实例,你打电话给他们。因此,如果您是从课程中获取方法,您必须自己提供此 self 。 并且只使用没有类的功能。 所以电话应该是这样的:

output += statCall(dog)