前提
Pythonで人材管理システムを作っています。classを用いて生成したオブジェクトを辞書に入れて出力したところ属性の情報がうまく入りませんでした。
実現したいこと
データ追加機能で生成したオブジェクトを辞書の中に005:('遠藤康太', '企画', 30)のように格納したい
発生している問題・エラーメッセージ
データを追加し、データ一覧を出力するとvalueの部分が<main.human object at 0x01890250>と表示されてしまいます。
♦♦メニュー番号を入力してください(1:データを追加,2:データ一覧,3:データ更新,4:データ削除,9:終了):2 データ一覧: 001:('佐藤ひとみ', '営業', 24), 002:('目黒彩人', '開発', 29), 003:('野田恵', '人事', 37), 004:('千秋真一', '総務', 44), 005:<__main__.human object at 0x01890250>,
該当のソースコード
Python
1class human(): 2 def __init__(self, context): 3 self.context = ('new_name', 'new_dep', 'new_age') 4 5def append_command(): 6 new_id = input('追加する社員の番号を入力してください:') 7 new_name = input('追加する社員の名前を入力してください:') 8 new_dep = input('追加する社員の部署を入力してください:') 9 new_age = input('追加する社員の年齢を入力してください:') 10 people = human(new_id) 11 data_dict[new_id] = people 12 print('データを追加しました\n') 13 14def display_command(): 15 print("データ一覧:") 16 for key, value in data_dict.items(): 17 print(f"{key}:{value},") 18 19 20def data_re(): 21 str_id = input('更新する社員の番号を入力してください:') 22 str_name = input('更新する社員の名前を入力してください:') 23 str_dep = input('更新する社員の部署を入力してください:') 24 str_age = input('更新する社員の年齢を入力してください:') 25 data_dict[str_id] = str_name, str_dep, str_age 26 print('データを更新しました。\n') 27 28def data_del(): 29 str_id = input('削除したい社員の番号を入力してください:') 30 data_dict.pop(str_id) 31 print('データを削除しました。\n') 32 33 34 35def file_command(): 36 append_file = open('management.txt' , 'a') 37 append_file.close() 38 39 write_file = open('management.txt', 'w') 40 for key in data_dict: 41 value = data_dict[key] 42 text = f'[{key}] {value}\n' 43 text2 = text.replace("(","").replace(")","") 44 text3 = text2.replace("'","").replace("'","") 45 write_file.write( text3 ) 46 write_file.close() 47 48 49 50 51 52data_dict = { 53 '001': ( '佐藤ひとみ', '営業', 24 ), 54 '002': ( '目黒彩人', '開発', 29 ), 55 '003': ( '野田恵', '人事', 37 ), 56 '004': ( '千秋真一', '総務', 44 ), 57} 58 59while True: 60 menu_str = input('♦♦メニュー番号を入力してください(1:データを追加,2:データ一覧,3:データ更新,4:データ削除,9:終了):') 61 menu = int(menu_str) 62 63 if menu == 1: 64 response = append_command() 65 66 elif menu == 2: 67 response = display_command() 68 69 elif menu == 3: 70 response = data_re() 71 72 elif menu == 4: 73 response = data_del() 74 75 elif menu == 9: 76 print('終了します') 77 78 responce = file_command() 79 80 break 81 82 else: 83 print('正しいメニュー番号を入力してください')
試したこと
keyとvalueの要素が一対一でなければならないのかと考え、クラスの定義のところで名前、部署、年齢の属性をcontextの一つにまとめてみました。
補足情報(FW/ツールのバージョンなど)
Python 3.8.3
> データを追加し、データ一覧を出力するとvalueの部分が<main.human object at 0x01890250>と表示されてしまいます。
そういう仕様ですよね。自作クラスで__str__メソッドを実装すれば良いのでは?
回答1件
あなたの回答
tips
プレビュー