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」が入力引数の 1 つを占有しているようです。
ここで何が欠けているのか誰か教えてもらえますか?
.....アップデート.....
これで、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」という既存の変数を探しています。このメソッドが本の例で機能したため、混乱しています。