Pythonのデータモデルについて学ぶにあたり、私は__new__
メソッドを使って既存のオブジェクトからオブジェクトを作成しています。ここでは、様々なタイプの新しいオブジェクトを作成するいくつかの例は以下のとおりです。__new__を使った既存のオブジェクトからのPythonオブジェクト
x = 2; print type(x).__new__(x.__class__)
x = {}; print type(x).__new__(x.__class__)
x = [1,2]; print type(x).__new__(x.__class__)
x = 2.34; print type(x).__new__(x.__class__)
x = '13'; print type(x).__new__(x.__class__)
x = 1.0j; print type(x).__new__(x.__class__)
x = True; print type(x).__new__(x.__class__)
x = (1,2); print type(x).__new__(x.__class__)
ただし、以下の3つの実験は私にエラーを与える:
x = None; print type(x).__new__(x.__class__)
x = lambda z: z**2; print type(x).__new__(x.__class__)
x = object; print type(x).__new__(x.__class__)
エラーが(それぞれ)は次のとおりです。
TypeError: object.__new__(NoneType) is not safe, use NoneType.__new__()
TypeError: Required argument 'code' (pos 1) not found
TypeError: type() takes 1 or 3 arguments
なぜこれらの3つの例は機能しませんか? (注:lambda
の例では、__new__
メソッドを呼び出すとコードフラグメントを渡す必要がありますが、その方法はわかりません)。私はPython 2.6を使用しています。
これは必ずしも実際のコードで新しいオブジェクトを作成したいとは限りませんが、私の目的は実用的ではなく、むしろ低レベルのオブジェクトメソッドの仕組みを理解することです。
そして、正確にはエラーメッセージが表示されます。 –
メッセージが追加されました、Rohit。提案していただきありがとうございます。 – rlandster