在类结构中使用functools.partial,“name'self'未定义”

时间:2016-01-08 20:56:12

标签: python pandas functools

以下是我的代码的显着简化版本。在__init__()之后有几个功能。

我正在尝试使用functools.partial创建基本comparison函数的不同版本,该函数引用类早期创建的函数calculation。此比较函数的一个版本可能是下面的grade_comparison

class Analysis(mybaseclass):

    def __init__(self, year, cycle):
....

    def calculation(self, subject):
        print subject

    def comparison(subject, **kwargs):
        self.calculation(subject)

    grade_comparison = functools.partial(comparison, infoList1 = ['A', 'B'])

运行代码时,出现错误NameError: global name 'self' is not defined。我尝试在许多似乎合乎逻辑的组合中添加self - 下面是一个例子。

self.grade_comparison = functools.partial(comparison, self, infoList1 = ['A', 'B'])

此更改导致此错误,NameError: name 'self' is not defined 当我将自我添加到比较函数时(见下文):

def comparison(self, subject, **kwargs):
        self.calculation(subject)

我收到此错误,TypeError: comparison() takes at least 2 arguments (1 given)。如果您需要更多背景,请告诉我们!如上所述,这是代码的准系统。

1 个答案:

答案 0 :(得分:3)

我认为你可以在没有partial的情况下实现你的目标:

class Analysis(object):

    def calculation(self, subject):
        print subject

    def comparison(self, subject, **kwargs):
        self.calculation(subject)

    def grade_comparison(self, subject):
        return self.comparison(subject, infoList1=['A', 'B'])