Python ― リスト上の彼女ら 

#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にも同じプロパティが存在するようになる。


[2007/12/26 22:42] Python | TB(1) | CM(2)