#expertpython エキスパートPythonプログラミング読書会05
- shimizukawa
- 2583
- 0
- 0
- 0
@cocoatomo 私の理解はそんな感じです。実際object.__new__(cls)と呼ぶと__init__は呼ばれないけれど、__new__の中で return object.__new__(cls)とすると__init__は呼ばれるようです。
2010-11-16 21:48:56RT !tk0miya: python の type って perl の bless と同じようなものかな。reference を bless するのと、dict を type するのと。 #expertpython
2010-11-16 21:50:03@cocoatomo すいません。差し込みじゃありませんね。__new__で何を返したてもいいようですし。Class() と呼ばれたとき、__new__が返したオブジェクトの__init__を呼ぶみたいです。
2010-11-16 21:55:07__metaclass__はクラスを生成する際のコンストラクタになってるのね。__new__はクラスのインスタンスを生成するときのコンストラクタ、ということかな #expertpython
2010-11-16 21:56:47@__aita__ Class.__init__(Class.__new__(Class)) ← こんな感じでしょうか? 崩して書くと self = Class.__new__(Class) Class.__init__(self) return self こんな感じですか?
2010-11-16 21:57:54@__aita__ あ、さっきの 1 行で書いたのだと self が返せない。。。やっぱり 3 行で書いた方で。 まだすっきりしないので帰って CPython のコード読みます。
2010-11-16 21:59:16@cocoatomo #expertpython when creating new objects, we use [obj alloc] init] messages.
2010-11-16 22:01:41@cocoatomo 実装が暗黙に面倒みてくれていて、我々が混乱しているみたいだから、Class()と呼ばれたときの挙動をPythonのスクリプトで考えるのは不毛かもしれません。
2010-11-16 22:02:14@isoparametric CPython読書会やりましょう。 RT @cocoatomo: @__aita__ あ、さっきの 1 行で書いたのだと self が返せない。。。やっぱり 3 行で書いた方で。 まだすっきりしないので帰って CPython のコード読みます。
2010-11-16 22:04:33見ぃたぁなぁ... RT @tk0miya: metaclass はどのプログラムでも生成されているかもしれません。ほら、あなたの後ろにも… #expertpython
2010-11-16 22:05:43