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

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

新規登録して質問してみよう
ただいま回答率
85.35%
オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Python

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

Q&A

解決済

2回答

1337閲覧

Python、インスタンスに添字をつけたりできますか?

退会済みユーザー

退会済みユーザー

総合スコア0

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Python

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

0グッド

0クリップ

投稿2020/07/20 10:54

はじめまして、プログラミング初心者です。
ただいまPythonの勉強をしていまして、お詳しい方、お力いただけると幸いです。

現在クラスについて勉強しております。簡単なクラスは実装できました。
またインスタンスを作成し、実際メソッドを実行できることも確認できたという状態です。
実際のコードは下記になります。

test.py

1class Animal: 2 3 def __init__(self,name): 4 self.name = name 5 6 def say(self): 7 print("私の名前は"+self.name+"です") 8 9 10dog = Animal("いぬ") 11cat = Animal("ねこ") 12dog.say() 13cat.say() 14→私の名前はいぬです。 15→私の名前はねこです。 16

ここまでは問題ないのですが、できればオブジェクトを添字をつけて大量に生成したいと思っております。この時エラーが出てしまいまして、例えば以下のように犬のオブジェクトに添字をつけて複数つくろうとするとエラーが出てしまいます。

test.py

1class Animal: 2 3 def __init__(self,name): 4 self.name = name 5 6 def say(self): 7 print("私の名前は"+self.name+"です") 8 9 10dog[0] = Animal("ぽち") 11dog[1] = Animal("ぺろ") 12dog[2] = Animal("ぽぽ") 13 14for i in range(0,3): 15 dog[i].say() 16

↓エラー内容↓

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-15-aaabaa8a100b> in <module>() 8 9 ---> 10 dog[0] = Animal("ぽち") 11 dog[1] = Animal("ぺろ") 12 dog[2] = Animal("ぽぽ") TypeError: 'Animal' object does not support item assignment

できれば添字のインデックスでオブジェクトにアクセスできる形式を作りたく、for文で処理したり条件に合致したインデックスのオブジェクトに対して操作をしたり・・・みたいなことを行いたいですが何か良い方法はないでしょうか。ご教授いただけると幸いです。

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

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

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

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

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

meg_

2020/07/20 11:05

質問のコードを実行すると上記とは別の下記エラーが出ますが。 「NameError: name 'dog' is not defined」
退会済みユーザー

退会済みユーザー

2020/07/20 11:09

ご指摘ありがとうございます。 NameErrorですか・・・あまり想定はしていなかったのですが 失礼ですが上記、下記どちらのコードでしょうか。
guest

回答2

0

投稿2020/07/20 11:10

javahack

総合スコア1088

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

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

退会済みユーザー

退会済みユーザー

2020/07/20 11:17

ご指摘ありがとうございます。 こちらも空のリストに加えていくというやり方でしょうか。 参考にしてみます。
javahack

2020/07/20 11:22

そうです。 can110さんの回答と同様の内容の説明がリンク先には書かれています。
退会済みユーザー

退会済みユーザー

2020/07/20 11:27

ありがとうございます、 こちらのサイトは基本的なことから丁寧に書かれておりますので 個人的には非常に信頼しております。
guest

0

ベストアンサー

最初に空のリストを作ってください。あとはそれにappendすればできます。

Python

1class Animal: 2 def __init__(self,name): 3 self.name = name 4 5 def say(self): 6 print("私の名前は"+self.name+"です") 7 8dog = [] # 空のリストを作成 9for name in ["ぽち", "ぺろ", "ぽぽ"]: 10 dog.append( Animal(name)) # リストに追加 11 12for d in dog: 13 d.say()

投稿2020/07/20 11:08

can110

総合スコア38341

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

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

退会済みユーザー

退会済みユーザー

2020/07/20 11:16

ご指摘ありがとうございます。空のリストに入れていけばいいということですね。 大変勉強になりました、ベストアンサーとさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問