私はアドレス帳に追加して更新するプログラムを書いています。ここに私のコードは次のとおりです。pythonでアドレス帳プログラムを書く際の問題
EDITEDは
import sys
import os
list = []
class bookEntry(dict):
total = 0
def __init__(self):
bookEntry.total += 1
self.d = {}
def __del__(self):
bookEntry.total -= 1
list.remove(self)
class Person(bookEntry):
def __init__(self, n):
self.n = n
print '%s has been created' % (self.n)
def __del__(self):
print '%s has been deleted' % (self.n)
def addnewperson(self, n, e = '', ph = '', note = ''):
self.d['name'] = n
self.d['email'] = e
self.d['phone'] = ph
self.d['note'] = note
list.append()
def updateperson(self):
key = raw_input('What else would you like to add to this person?')
val = raw_input('Please add a value for %s' % (key))
self.d[key] = val
def startup():
aor = raw_input('Hello! Would you like to add an entry or retrieve one?')
if aor == 'add':
info = raw_input('Would you like to add a person or a company?')
if info == 'person':
n = raw_input('Please enter this persons name:')
e = raw_input('Please enter this persons email address:')
ph = raw_input('Please enter this persons phone number:')
note = raw_input('Please add any notes if applicable:')
X = Person(n)
X.addnewperson(n, e, ph, note)
startup()
私はこのコードを実行すると、私は次のエラーを取得する:
in addnewperson
self.d['name'] = n
AttributeError: 'Person' object has no attribute 'd'
私は2つの質問があります。
UPDATED質問に 1.なぜd
オブジェクトが継承しないのですかd:bookentry()
?
私はこの質問/コードが長いことを知っていますが、ここからどこに行くのかわかりません。どんな助けでも大歓迎です。
多くの問題はすでに述べられています(多くは言及されていません)。もう1つ:モジュールレベル(リスト= [])のシャドーリストには良いことではありません。リストの別の名前を選択するか、電話帳クラスに小冊子 –
@ RomanSusiを入れるようにしてください。なぜこれが設計/機能の観点から優れているのか説明できますか? – dopatraman
@codeninja ** list **はstarndard python型です。そのため、別の名前を使用する方が良い理由です。 PhoneBookの提案では、複数のエントリを持つことができます。これは、現在使用できない場合でもプログラムの拡張性を向上させます(この場合、PhoneBookをシングルトンとして扱うことができます)。 – mgibsonbr