Python
クラス
リスト
オブジェクト

Pythonのリストでクラスのオブジェクトを格納する


Python のリストにクラスのオブジェクトを入れる

Pythonのリストには,クラスのオブジェクトを入れることができます.

まず,Person というクラスを作ります.

class Person:

def __init__(self, name, email):
self.name = name
self.email = email

そして,TaroとJiroというオブジェクトを作ります.

Taro = Person("Taro", "Taro@python.com")

Jiro = Person("Jiro", "Jiro@python.com")

そして,これらをPerson_infoというリストに格納します.

Person_info = [Taro, Jiro]

そして,リストの内容を表示するコードを書きました.

for member in Person_info:

print("Name:", member.name, " Email:", member.email)

コード全体は次のようになります.


Person.py

class Person:

def __init__(self, name, email):
self.name = name
self.email = email

Taro = Person("Taro", "Taro@python.com")
Jiro = Person("Jiro", "Jiro@python.com")

Person_info = [Taro, Jiro]

for member in Person_info:
print("Name:", member.name, " Email:", member.email)


結果,次のように表示されました.

$python Person.py

Name: Taro Email: Taro@python.com
Name: Jiro Email: Jiro@python.com

このように,Pythonのリストは,クラスのオブジェクトを格納することができます.

また,新しいメンバーがやってきてもappend()を使えば対処できます.

Person.pyを次のように書き換えます.


Person.py

class Person:

def __init__(self, name, email):
self.name = name
self.email = email

Taro = Person("Taro", "Taro@python.com")
Jiro = Person("Jiro", "Jiro@python.com")

Person_info = [Taro, Jiro]

#Add from here

Saburo = Person("Saburo", "Saburo@python.com")
Person_info.append(Saburo)

#Add until here

for member in Person_info:
print("Name:", member.name, " Email:", member.email)


これを実行すると次のように表示されます.

$python Person.py

Name: Taro Email: Taro@python.com
Name: Jiro Email: Jiro@python.com
Name: Saburo Email: Saburo@python.com

このように,メンバーが追加されたことが分かりました.


追記

@shiracamusさんが教えてくださったように,Pythonでは数値,文字列,関数,クラス,メソッドのすべてがオブジェクトとして扱われるため,今回と同様の話を適用することができます.

コメントのように,intクラスについても同様のコードを書くことができます.

>>> one = int('1')

>>> two = int('2')
>>> number_info = [one, two]
>>> three = int('3')
>>> number_info.append(three)
>>> for number in number_info:
... print("Number:", number)
...
Number: 1
Number: 2
Number: 3

ただ,不変オブジェクトというものもあり,intクラスのオブジェクトはその代表格です.

例えば,先程のPerson.pyのPersonクラスについてはオブジェクトを作成後も内容を変更することができます.

>>> from Person import Person 

>>> Hanako = Person("Hanako", "oops@python.com")
>>> Hanako.email = "hanako@python.com" #変更できた

しかし,こちらのサイトを参考にintクラスのオブジェクトで同様のことをすると,

>>> a = int(1)

>>> a.real #実部
1
>>> a.image #虚部
0
>>> a.real = 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: attribute 'real' of 'int' objects is not writable

書き換えることができないことが確認できました.つまり,intクラスはPersonクラスと違い,immutableです.