質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

378閲覧

Python:生成したオブジェクトを辞書に追加したい

kokemaru2119

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/07/24 10:03

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2022/07/24 10:35

> データを追加し、データ一覧を出力するとvalueの部分が<main.human object at 0x01890250>と表示されてしまいます。 そういう仕様ですよね。自作クラスで__str__メソッドを実装すれば良いのでは?
guest

回答1

0

ベストアンサー

追加の部分だけですとhuman, append_commandを以下のように修正してください

python

1class human(): 2 def __init__(self, new_name, new_dep, new_age): 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_name, new_dep, new_age) 11 data_dict[new_id] = people.context 12 print('データを追加しました\n')

なお、データの追加も更新もdata_re関数でできますよ。
data_re関数でdata_dict[str_id] = str_name, str_dep, str_ageとしていますが、この場合は辞書にない場合は追加されます。
辞書にある場合は更新されます

投稿2022/07/24 11:39

編集2022/07/24 11:44
East_san

総合スコア407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokemaru2119

2022/07/24 14:53

無事問題なく動きました m(_ _)m ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問