0

私にはクラスがあり、その__init__関数はたくさんのことを行います。必要なのはそれだけです。

__init__だから私は本当にこのクラスの関数を呼び出したいだけです。変数に割り当てずにこれを行うにはどうすればよいですか?

4

2 に答える 2

6

クラスが呼び出されたとするとFoo、次のことができます。

Foo()

ただし、これを行う必要がある場合は、設計を再考する必要があることを示している可能性があります。

于 2012-07-09T21:45:45.947 に答える
3

まず第一に、これは明らかに設計エラーです-そのコードはスタンドアロン関数でなければなりません。

ただし、これを行うにはいくつかの方法があります。

  1. 通常どおりインスタンス化するだけです。式の結果を変数に割り当てる必要はありません。ただし、これにより完全なオブジェクトが構築されます(そしておそらくその後すぐに破壊されます)。

    Foo()
    
  2. 基になる関数を呼び出します。

    Foo.__dict__.get('__init__')(None)
    

これはオブジェクトの構築をトリガーしませんが、おそらくそれは望ましくありません。Noneこの例では、の値として渡したことに注意してくださいself。これは、__init__何もしない場合にのみ機能しselfます(または、そうである場合を処理しますNone)。

2a。staticmethodを使用して、これを簡単にすることができます。

In [32]: class Foo(object):
   ....:     @staticmethod
   ....:     def __init__():
   ....:         print "Foo init"
   ....:

In [33]: Foo()
Foo init
Out[33]: <django.core.management.commands.shell.Foo at 0x46d49b0>

In [34]: Foo.__init__()
Foo init
于 2012-07-09T21:50:00.157 に答える