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