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 回答