ラベル metaclass の投稿を表示しています。 すべての投稿を表示
ラベル metaclass の投稿を表示しています。 すべての投稿を表示

2010年11月5日金曜日

Pythonのメタクラスで __new__() メソッドが必要な例

Pythonのメタクラスで __init__() メソッドではなく、__new__() メソッドを必要とする例を考えていたら、@aodagさんの「Pythonでfinalなクラス」がまさにそれだった。
イカは例によってPython 3版

2010年11月3日水曜日

Python 3のデザインパターンでメタクラスしてみた(2)

前回の続きです。

・メタクラス
メタクラスとは一体何なのでしょうか?

その詳細については、@aodagさんの「Pythonのメタクラスについて」という文書を読んでください……これは、メタクラスをどうやって説明しようか散々悩んだ末、Python初心者の私が内容の怪しい説明をするよりは、上級者の方のちゃんとした説明を読んで頂いた方がいいに違いない!と信じたからであって、メタクラスを説明しようとしたらめちゃくちゃ面倒臭いし、さっぱり分からなかったので手抜きをしようとした訳ではありません!!ので、くれぐれも誤解のなきようお願い致します!!!(←言い訳)

ただ、この資料はPython 2系向けの資料なので、サンプルコードをそのままPython 3で実行するとエラーが発生します。
念のため、サンプルコードをPython 3向けに修正しつつ実際に実行してみた結果を下記に掲載しますので、恐れ入りますが、適宜読み替えてください。

2010年11月1日月曜日

Python初心者によるPythonのメタクラスのはまりどころのまとめ

私「そっか、クラスオブジェクトを生成するのは type.__new__() で、その実体は、Pythonのソースの Objects/typeobject.c にある type_new()関数だったんだね!」

ぐぐる様「クラスオブジェクトを生成するのは __build_class__ 関数だよ」

私「え?」←イマココ

2010年10月31日日曜日

Python 3のデザインパターンでメタクラスしてみた(1)

必要もないのにPython 3とデザインパターンとメタクラスを使うのはPythonプログラマ的厨二病の定番らしいので、とりあえず全部混ぜてエントリを書いてみました。(挨拶)

Pythonでデザインパターンを試す場合はGoFSingleton パターンが定番らしいのですが、今回は私の好みでFlyweight パターンを選択しました。
Flyweight パターンの詳細については、恐れ入りますがWikipediaの該当項目を参照してください。