首页 > 解决方案 > 我不断收到错误消息,说我的类名未在 python 中定义

问题描述

由于这个错误,我已经在我的学校计划中停留了一个多小时,我似乎无法弄清楚如何解决它。

导入系统

类我的日期:

#Constructer
def __init__(self, month, day, year):
    self.day = day    #Privet day
    self.month = month  #Privet month
    self.year = year   #privet year


#format for MDYYYY
def MDYYYY(self):
    print("%i/%i/%i" %(myDate.month, myDate.day, myDate.year))
    
#format for MDYY
    
#format for YYYYMD

#mutator  to set Day of the month
def setDay(self, a):
    try:
        day = int(a)
        if day < 1 or day > 31:
            raise Exception("invalid day")
    except Exception as err:
        print("Invalid day")
        sys.exit( err )
    else:
        self.__day = day
    
#Mutator to set Month of the year
def setMonth(self, a):
    try:
        month = int(a)
        if month < 1 or month > 12:
            raise Exception("invalid month")
    except Exception as err:
        print("Invalid month")
        sys.exit( err )
    else:
        self.__month = month
        
#Mutator to set the year of the date
def setYear(self, a):
    try:
        day = int(a)
        if day < 1700:
            raise Exception("invalid year")
    except Exception as err:
        print("Invalid year")
        sys.exit( err )
    else:
        self.__year = year

# accessor to get day
def getDay(self):
    return self.__day

# accessor to get the month
def getMonth(self):
    return self.__month

# accessor to get the year
def getYear(self):
    return self.__year

if __name__ == "__main__":
    print()
    print( "Instantiating object today and sorting value using .setMonth(6) .setDay(17) .setYear(2019)" )
    setDay.day = 17
    setMonth.month = 6
    setYear.year = 2019
    
    print(myDate.MDYYYY())

我在运行它时得到了这个结果:今天实例化对象并使用 .setMonth(6) .setDay(17) .setYear(2019) Traceback(最近一次调用最后一次)对值进行排序:文件“D:\RCCC\Fall 2020\Python GUI\Project 1\dateformat_duxbury.py",第 8 行,在 myDate() 类中:文件 "D:\RCCC\Fall 2020\Python GUI\Project 1\dateformat_duxbury.py",第 80 行,在 myDate print(myDate.MDYYYY ()) NameError: name 'myDate' 未定义

标签: pythonclassobject

解决方案


从您帖子的格式来看,您的方法定义似乎与您的类 myDate 声明处于相同的缩进级别。这意味着它们不是该类的方法,而是全局空间的方法。您应该缩进所有这些,以便它们比 myDate 类的声明更深一层。这解释了“名称 'myDate' 未定义”错误。

还有几个错误:

  1. 您正在使用 setDay、setMonth 和 setYear,就好像它们是对象一样,这是不正确的。它们应该从类 myDate 的实例中调用。为此,您必须首先创建该实例,然后从中调用这些方法,如下所示:

例子:

date = myDate()
date.setDay(17)
date.setMonth(6)
date.setYear(2019)
  1. 您正在使用 myDate.MDYYYY() 这可能不会按照您的意图执行,因为 myDate 是一个类,而不是一个类的实例。请参阅上面的示例,了解如何创建该类的实例。

不要误会,但听起来您应该查看有关 Python 中的类如何工作的教程。


推荐阅读