Python 在类结构中使用functools.partial;名称';自我';“未定义”;

Python 在类结构中使用functools.partial;名称';自我';“未定义”;,python,pandas,functools,Python,Pandas,Functools,下面是我的代码的一个大大简化的版本。在\uuuu init\uuuu()之后有几个函数 我正在尝试使用functools.partial创建基本比较函数的不同版本,该函数引用在类calculation前面创建的函数。此比较函数的一个版本可能是下面所示的grade\u比较 class Analysis(mybaseclass): def __init__(self, year, cycle): .... def calculation(self, subject):

下面是我的代码的一个大大简化的版本。在
\uuuu init\uuuu()之后有几个函数


我正在尝试使用
functools.partial
创建基本
比较
函数的不同版本,该函数引用在类
calculation
前面创建的函数。此比较函数的一个版本可能是下面所示的
grade\u比较

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:未定义全局名称“self”
。我尝试过在许多看起来合乎逻辑的组合中添加
self
——下面的一个例子

self.grade_comparison = functools.partial(comparison, self, infoList1 = ['A', 'B'])
此更改导致此错误,
name错误:未定义名称“self”
当我将self添加到比较函数时(见下文):


我得到这个错误,
TypeError:comparison()至少接受2个参数(给定1个)
。请让我知道,如果你需要更多的背景!如前所述,这是代码的基本内容。

我认为您可以在不使用
部分
的情况下实现您想要的:

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'])

提示:查看
比较
及其参数列表。是否有
self
functools.partial
不支持描述符协议,因此您不能将
partial
对象用作类似的方法。请澄清一下?为什么不能在这种情况下使用分部对象?@skrrgwasme:您可以在
\uuuu init\uuuuu
中设置
self.something=partial(self.otherthing,args)
,但您不能在类级别设置它,因此
分析.grade\u比较
不能是
分部
对象。在实例级别设置它有点混乱,因为自省和反思变得很奇怪,覆盖它不起作用。@user2357112啊,我明白了。我误读了她的密码。不知何故,我错过了她指定的分部作为类方法,而不是在类方法上使用类外分部。我的错误。这是一个很好的例子,说明了有时候简单的方法是更好的。我在想我们应该用装饰师。。。
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'])