很抱歉,如果已经在StackOverflow上提出了以下问题,但是我找不到在这里发布的问题,或者经过一段时间的谷歌搜索之后也找不到答案。
我的问题如下。我期望下面的Python代码,
class MNL(object):
def load_data():
r = 3 + 4
return r
def load_data_wrapper():
s = load_data()
return s
返回输出“ 7”。相反,我收到错误消息“ NameError:未定义名称'load_data'”。
如果将倒数第二行更改为“ s = self.load_data()”,则会得到“ NameError:名称'self'未定义”。作为参考,我使用的是Python 3.6.5。
任何帮助将不胜感激!
答案 0 :(得分:2)
在Python中对对象方法或属性的任何引用都需要self
关键字,并且它应该始终是任何类方法的第一个参数。要修复您的代码,应为:
class MNL(object):
def load_data(self):
r = 3 + 4
return r
def load_data_wrapper(self):
s = self.load_data()
return s
self
参数接收对象的引用。
答案 1 :(得分:0)
基于我在注释中看到的问题,我想对代码进行一些更改。
class MNL(object):
@staticmethod
def load_data():
r = 3 + 4
return r
@classmethod
def load_data_wrapper(cls):
s = cls.load_data()
return s
def load_data_wrapper2():
return MNL.load_data()
这利用Class and Static methods这些函数不能对“自我”进行操作,而是您仍想绑定到单个类的方法
>>> MNL.load_data_wrapper2()
7
>>> MNL.load_data_wrapper()
7