/var/log/messages

debugging with sixth sense

Python におけるオブジェクトの配列

たとえばこんなクラス定義があり

1
2
class HogeMessage(object):
    pass

REPL にて聞いてみると以下な返答が戻ってきます。

1
2
>>> HogeMessage
<class '__main__.HogeMessage'>

これは定義されているクラスもオブジェクトとして参照できる、という事ですね。で、今日不勉強ながら初めて見たのですがこの HogeMessage の要素が一つだけの配列、なクラスの定義もオブジェクトとして云々できるみたいなのですね。

1
HogeMArray = HogeMessage * 1

これを評価して REPL で聞いてみたのが以下。

1
2
>>> HogeMArray
<class '__main__.HogeMessage_Array_1'>

クラスオブジェクトとして認識されているのが分かります。このオブジェクトを生成してみます。

1
HOGE = HogeMArray()

REPL に聞いてみますと以下な回答。

1
2
>>> HOGE
<__main__.HogeMessage_Array_1 object at 0x018421C0>

これはこれは。

おわりに

Ruby なんかもクラスはオブジェクトのはずなので、同じような書き方できるのだろうか、ともあれ

  • Python ではクラスもひとつのオブジェクト
  • クラスオブジェクトに整数を掛けた値はそのオブジェクトの配列クラスとなる(かけた値が要素数)
  • 掛け算で作られたクラスオブジェクトを生成すると配列の実体が生成される

ということらしい。不勉強ですみません。

Comments