みんなのPython第3版のアプリケーションを作るというチャプターに乗っていたサンプルコードなのですが、エラーが出てしまいます。
今日ずっと調べていたのですがわからず、進捗が溶けていきます。
何度も確認しているので打ち間違えはないと思います。
教えていただけると助かります。
todoitem.py
Python
1#A class to save ToDo's Item. 2class ToDoItem(object): 3 4 #Initialization Method 5 def __init__(self, title, description, duedate, addeddate = None): 6 7 if not addeddate: 8 addeddate = datetime.now() 9 10 self.title = title 11 self.description = description 12 self.duedate = duedate 13 self.addeddate = addeddate 14 self.finished = False 15 self.finisheddate = None 16 17 18 #Finish ToDo 19 def finish(self, date = None): 20 21 self.finished = True 22 23 if not date: 24 date = datetime.now() 25 26 self.finisheddate = date 27 28 #Debug 29 def __repr__(self): 30 31 return "<ToDoItem {}, {}>".format(self.title, self.duedate.strftime('%Y/%m/%d %H:%M')) 32 33
todocontainer.py
Python
1#import module 2from datetime import datetime, timedelta 3 4#A Class To Save List of ToDo 5class ToDoContainer(object): 6 7 #Initialization Method 8 def __init__(self): 9 10 self.todos = [] 11 12 #return Items of ToDo 13 def __len__(self): 14 15 return len(self.todos) 16 17 #ToDo is sorted as DeadLine 18 def sort(self): 19 20 self.todos.sort(key = lambda x : x.duedate) #!!! 21 22 23 def __add__(self, item): 24 25 self.todos.append(item) 26 self.sort() 27 28 def __iadd__(self, item): 29 30 self.__add__(self,item) 31 return self 32 33 #IndexAccess emulation 34 def __getitem__(self, idx): 35 36 return self.todos[idx] 37 38 #eassignment of Index emulation 39 def __setitem__(self, idx, item): 40 41 self.todos[idx] = item 42 self.sort() 43 44 #del points Index emulation 45 def __delitem__(self, idx): 46 47 del self.todos[idx] 48 49 #return notEnd list of ToDo 50 def get_remaining_todos(self): 51 52 return [t for t in self.todos if not t.finished]
user@ubuntu~$ python3
from datetime import datetime
from todoitem import ToDoItem
from todocontainer import ToDoContainertodos = ToDoContainer()
for d in range(19, 0, -1):
. . . td = ToDoItem('title {}'.format(d), datetime(2012, 10, d))
. . . todos += td
. . .
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
TypeError: unsupported operand type(s) for +=: 'ToDoContainer' and 'ToDoItem'
コメントの英語は自分が分かるように書いているので汚いのは気にしないでください。
最後の行の
todos += td
でエラーが出ていると思っているのですが
これは特殊メソッド__add__()で呼び出しているんですよね?
だったらなぜ+=が通らないのかが分からないです。
Pythonのバージョンなどが原因とは考えられないです。(たぶん
ちなみにPython3.4です。
お時間があれば回答よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/03 02:30