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)
コード全体は次のようになります.
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を次のように書き換えます.
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です.