【发布时间】:2025-12-01 06:10:02
【问题描述】:
我正在尝试在 python 3 中学习面向对象的编程。我正在制作我在书中的笔记本程序的变体,但我没有向笔记本添加笔记,而是尝试在时间表中添加日期。
在原始教程中,这是在主程序中:
def add_note(self):
memo = input("Enter a memo: ")
self.notebook.new_note(memo)
print("Your note has been added")
这是在课堂模块(笔记本)中:
def new_note(self, memo, tags = ''):
'''create a new note and add it to the list'''
self.notes.append(Note(memo,tags=''))
我的变体如下所示:
主要:
def add_work_day(self):
date = input ("Enter date : ")
hours = input ("Enter hours worked : ")
rate = input ("Enter hourly rate : £")
workday = Timesheet.day(date, hours, rate)
模块:
class Timesheet:
def __init__(self):
self.timesheet = []
def day(self, date, hours, rate):
self.timesheet.append(day(date, hours, rate))
它给了我这个错误:
File "C:\Python33\timesheet_menu.py", line 39, in add_work_day
workday = Timesheet.day(date, hours, rate)
TypeError: day() missing 1 required positional argument: 'rate'
'def day(self, date, hours, rate)' 中的'self' 似乎占用了我的输入参数之一。
谁能告诉我这里缺少什么?
.....更新.....
所以现在我在 main 中创建了 Timesheet() 的一个实例:
def add_work_day(self):
date = input ("Enter date : ")
hours = input ("Enter hours worked : ")
rate = input ("Enter hourly rate : £")
workday = Timesheet()
workday.add_day(date, hours, rate)
但是我的 Timesheet() 方法“day”出现了一个新错误
class Timesheet:
def __init__(self):
self.timesheet = []
def day(self, date, hours, rate):
self.timesheet.append(day(date, hours, rate))
File "C:\Python33\timesheet_menu.py", line 40, in add_work_day
workday.add_day(date, hours, rate)
File "C:\Python33\timesheet.py", line 29, in add_day
self.timesheet.append(day(date, hours, rate))
NameError: global name 'day' is not defined
我知道问题出在 .append(day 部分,但我不知道如何解决它。我知道除非指定变量不是全局变量,但我的逻辑告诉我该方法应该是。所以它一定是 .append(day 正在寻找一个名为“day”的预先存在的变量。我很困惑,因为这种方法在书中的示例中有效。
【问题讨论】:
-
在
Timesheet的day()方法中,您尝试调用day(),这会(如果您的语法正确)导致无限循环。您实际上想要完成什么? -
是的,我偶然发现了那个无限循环!我现在已经整理好了。我忘记了我应该调用另一个名为 Work_day 的类,而不是在 day() 中调用 day()。感谢您的帮助和耐心!