它显示名称错误名称未定义MEETING_TIMES

时间:2020-04-14 02:09:44

标签: python oop object methods nameerror

我定义了一个MEETING_TIMES的2D数组,但它显示了NameError并显示了错误 关于数据类的数据对象

class Data:
    MEETING_TIMES = [
        ["MT1", "MWF 09:30 - 12:00"],
        ["MT2", "MWF 01:30 - 04:00"],
        ["MT3", "TTH 09:30 - 12:00"],
        ["MT4", "TTH 01:30 - 04:00"]
    ]

    def __init__(self): 
        self._meetingTimes = []
        for i in range(0, len(MEETING_TIMES)):
            self._meetingTimes.append(MeetingTime(self.MEETING_TIMES[i][0],
            self.MEETING_TIMES[i][1]))
            # Parameters = id and meeting time

data = Data()

2 个答案:

答案 0 :(得分:0)

有时候您正确使用self.MEETING_TIMES,而其他时候您错误使用MEETING_TIMES。那么,有什么区别呢?执行方法时,变量可以在方法本地,也可以在“超级全局”内建命名空间中定义的模块全局。在第一种情况下,self在本地名称空间中(到目前为止很好),而MEETING_TIMES不是。实例对象还有另外一条规则:如果实例数据中没有变量,则python查找类名称空间。 Python看到self,但看不到self.MEETING_TIMES,因此回退到定义变量的self.__class__.MEETING_TIMES

答案 1 :(得分:-1)

我相信您会混淆类变量和实例变量。您定义MEETING_TIMES的方式是一个类变量。它是整个类Data的属性,而不仅仅是它的任何特定实例。因此,要引用它,请使用Data.MEETING_TIME,因为它是实际类的属性。

您可能想尝试以下代码:

class Data:
    MEETING_TIMES = [
    ["MT1", "MWF 09:30 - 12:00"],
    ["MT2", "MWF 01:30 - 04:00"],
    ["MT3", "TTH 09:30 - 12:00"],
    ["MT4", "TTH 01:30 - 04:00"]
    ]
    def __init__(self): 
        self._meetingTimes = []
        for i in range(0, len(Data.MEETING_TIMES)):
            self._meetingTimes.append(????(Data.MEETING_TIMES[i][0],
            Data.MEETING_TIMES[i][1]))
            # Parameters = id and meeting time
data = Data()

在哪里,恐怕我用???代替了MeetingTime,因为我不确定拼写所指的是什么方法。