34
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

U-Tokyo mech (東京大学機械系)Advent Calendar 2018

Day 14

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

Last updated at Posted at 2018-12-15
##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です.

34
32
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?