在Python 3.6.5中无法在类本身内调用类的属性

时间:2019-05-08 22:41:32

标签: python python-3.x

很抱歉,如果已经在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。

任何帮助将不胜感激!

2 个答案:

答案 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