データベースに属性が保存されているオブジェクトを作成しようとしています。したがって、私は__init__
に電話したくありません。この欲望はGuido's intended use for __new__
とインラインであるように見えます。 __init__
がなぜ呼び出されないのか分かりません。__new__が引数なしで呼び出された場合、__init__が呼び出されないのはなぜですか?
たとえば、次のスニペットを実行すると、__init__
を呼び出さずにUserクラスのインスタンスが返されます。
class User(object):
def __init__(self, arg1, arg2):
raise Exception
user = User.__new__(User)
print user
<project.models.User object at 0x9e2dfac>
これは私が望む動作です。しかし、私の質問は、なぜ私は理解していないということですか?
python docs__init__
は、__new__
が「clsのインスタンスを返す」ときに呼び出されることになっています。
__init__
は、__new__
がクラスインスタンスを返しても、なぜ呼び出されないのですか?
実際に動作するコードを投稿してください。あなたは 'def __init__'を意味しましたか? –
私はこの同じことに出くわしました。しかし、ドキュメントでは、「__new __()がclsのインスタンスを返すと、新しいインスタンスの__init __()メソッドが__init __(self [、...])」のように呼び出されます。それはドキュメントのバグですか、私はそれを誤解していますか? – UsAaR33
@ UsAaR33あなたはそれを間違って解釈しています。 'SomeClass(args)'を呼び出すと(通常は) 'instance = SomeClass .__ new __(SomeClass、args)'が実行され、 'インスタンス.'が' SomeClass'のインスタンスであれば 'instance .__ init __(args)'が呼び出されます。ドキュメントは、 '__new__'を直接呼び出すことは、それを最初に定義する必要があるよりも稀ですから、そのシーケンスの文脈では' __new__'について話しています。 – Ben