#Pythonのシェルで遊んでみた。
#とりあえず、クラスを作ってみる。
>>> class Chara:
def __init__(self, s):
self.name = s
#「class」はクラスを定義するキーワード、「Chara」がクラス名、「__init__(self,s)」はコンストラクタで、「self」がないとエラーになる。sはインスタンス作成時にPythonに渡すものを入れる仮引数。self.nameはCharaクラスのプロパティ。
>>> p=Chara('Haruhi')
>>> p.name
'Haruhi'
#「Chara('Haruhi')」で作ったインスタンスを変数pに格納し、「p.name」でnameプロパティを求めると、'Haruhi'を返してくれる。
#あ、性別も設定したくなった。
>>> p.sex='female'
>>> p.sex
'female'
#Charaクラスにはsexプロパティが設定されていないにもかかわらず、pはsexプロパティを持つことができる。このあたりのいい加減さに少々カルチャーショックを覚える。
#ところで、このpそのものなんだが……
>>> p
<__main__.Chara instance at 0x00DB9D00>
#pの正体を問い合わせると、メモリ上でpを格納しているアドレスが帰ってくる。
#とりあえず、このpをリストに入れてみる。
>>> cl[0] = p
Traceback (most recent call last):
File "", line 1, in
cl[0] = p
NameError: name 'cl' is not defined
#エラー発生。実は、Pythonでリストに項目を追加する表現は一風変わっている。
>>> cl = [p]
>>> cl[0]
<__main__.Chara instance at 0x00DB9D00>
#cl[0]とpのアドレスは一致している。つまり、cl[0]とpは全く同じものとして扱われる。
>>> cl[0].age=16
>>> p.age
16
#ほらね。cl[0]にageプロパティを追加すると、pにも同じプロパティが存在するようになる。