繁体   English   中英

我不断收到错误消息,说我的类名未在 python 中定义

[英]i keep getting the error saying that my class name is not defined in 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) 回溯(最近一次调用):文件“D:\\RCCC\\Fall 2020\\Python” GUI\\Project 1\\dateformat_duxbury.py", line 8, in class myDate(): File "D:\\RCCC\\Fall 2020\\Python GUI\\Project 1\\dateformat_duxbury.py", line 80, in myDate print(myDate.MDYYYY.py) ()) NameError: name 'myDate' 未定义

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

还有几个错误:

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

例子:

date = myDate()
date.setDay(17)
date.setMonth(6)
date.setYear(2019)
  1. 您正在使用 myDate.MDYYYY() ,它可能不会执行您想要的操作,因为 myDate 是一个类,而不是一个类的实例。 请参阅上面有关如何创建该类实例的示例。

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

欢迎使用堆栈溢出。

您的问题似乎更像是一个概念上的问题,而不是实现上的问题。 我强烈建议您阅读面向对象的原则,因为您似乎混淆了类和对象。

例如,您的具体错误是参考了这部分代码:

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

但是,您是否考虑过该函数中是否有 myDate 的任何实例? 实际上,您尝试访问的是您将从中调用 MDYYYY() 的特定对象的月、日和年。 在这种情况下,您需要访问对象自己的月、日和年变量。 为此,您可以使用self关键字访问对象的内部变量。

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

现在,第二个问题是在主代码块中实例化一个对象。

if __name__ == "__main__":
    print()
    print( "Instantiating object today and sorting value using .setMonth(6) .setDay(17) .setYear(2019)" )
    # Instantiate a myDate object here:
    myDateObject = myDate(4, 25, 2005) # You need to pass in the month, day and year values as part of your class init function

    # You call instance functions on the object itself, such as
    myDateObject.setDay(7)
    myDateObject.setMonth(6)
    myDateObject.setYear(2019) 
    
    # Call the MDYYYY function on the myDateObject instance and not the myDate class
    print(myDateObject.MDYYYY())

同样,我强烈建议您复习一些 OOP 基础知识。 希望这会有所帮助。

目前尚不清楚为什么在您的main部分中您访问类方法而不先实例化类。 你的评论说你正在实例化这个类,但你真的不是。 它应该是这样的:

if __name__ == "__main__":
    md = myDate(1, 1, 1900)
    md.setDay(17)
    md.setMonth(6)
    md.setYear(2019)

好的,那么MDYYYY()方法以奇怪的方式定义。 这是myDate类的一个方法,但出于某种原因,您指的是该类,而不是简单地使用self

def MDYYYY(self):
    print("%i/%i/%i" %(myDate.month, myDate.day, myDate.year))

#Should probably be defined instead like
def MDYYYY(self):
    print(f'{self.month}/{self.day}/{self.year}')

此外,您有缩进问题,并且您的类/方法名称不是 Pythonic(请参阅PEP 8 )。

因此,如果其他人遇到此问题,这里是我用来解决问题的最终代码,感谢评论并帮助我的人。 另外我不知道为什么它会在代码中显示导入和类,但所有功能都被标记了。

`导入系统

我的日期类:

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


#format for MDYYYY
def MDYYYY():
    print(f'{myDate.month}/{myDate.day}/{myDate.year}')
    
#format for MDYY
def MDYY():
    print(f'{myDate.month}/{myDate.day}/{myDate.year}')

#format for YYYYMD
def YYYYMD():
    print(f'{myDate.year}/{myDate.month}/{myDate.day}')

#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( "今天实例化对象并使用 .setMonth(6) .setDay(17) .setYear(2019)" ) myDate.day = 17 myDate.month= 6 myDate.年 = 2019

# Print the date format for MM/DD/YYYY (01/01/2001)
print('Showing date in format- MM/DD/YYYY: ', end = '')
print(myDate.MDYYYY())
    
print("Instantiating object today and sorting value using .setMonth(7) .setDay(18) .setYear(2021)")
myDate.day = 18
myDate.month= 7
myDate.year = 2021

if myDate.year > 1699 and myDate.year < 1800:
    myDate.year = myDate.year - 1700
    
elif myDate.year > 1799 and myDate.year < 1900:
    myDate.year = myDate.year - 1800
    
elif myDate.year > 1899 and myDate.year < 2000:
    myDate.year = myDate.year - 1900

elif myDate.year > 1999 and myDate.year < 2100:
    myDate.year = myDate.year - 2000

# Print the date fomat for MM/DD/YY (01/01/01)
print('Showing date format - MM/DD/YY: ', end = '')
print(myDate.MDYY())

myDate.year = 2021
# Prints the date format for YYYY/MM/DD (2001/01/01)
print('Showing date format - YYYY/MM/DD: ', end ='')
print(myDate.YYYYMD())
print()`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM