在 class 结构中使用 functools.partial,"name 'self' is not defined"
Using functools.partial within class structure, "name 'self' is not defined"
下面是我的代码的一个明显简化的版本。 __init__()
之后有几个函数。
我正在尝试使用 functools.partial
创建基本 comparison
函数的不同版本,它引用了之前在 class、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)
。如果您需要更多上下文,请告诉我!如前所述,这是代码的准系统。
我觉得不用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'])
下面是我的代码的一个明显简化的版本。 __init__()
之后有几个函数。
我正在尝试使用 functools.partial
创建基本 comparison
函数的不同版本,它引用了之前在 class、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)
。如果您需要更多上下文,请告诉我!如前所述,这是代码的准系统。
我觉得不用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'])