5

下面是我的代码的一个显着简化的版本。之后__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 当我将 self 添加到比较函数时(见下文):

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

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

4

1 回答 1

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'])
于 2016-01-08T21:14:41.947 回答