如何在不为其分配变量的情况下实例化对象

时间:2012-07-09 21:44:03

标签: python

我有一个班级,__init__函数做了很多东西,这就是我需要的。

所以我真的只想调用这个类的__init__函数。如何在不将其分配给变量的情况下执行此操作?

2 个答案:

答案 0 :(得分:6)

假设您的班级名为Foo,您可以执行以下操作:

Foo()

但是,如果您需要这样做,可能表明您需要重新考虑您的设计。

答案 1 :(得分:3)

首先,这显然是一个设计错误 - 代码应该只是一个独立的功能。

但是,有几种方法可以做到这一点:

  1. 正常实例化 - 没有理由必须将表达式的结果赋给变量。但是,这将导致完整的对象构造(此后不久可能会破坏)。

    Foo()
    
  2. 调用基础函数:

    Foo.__dict__.get('__init__')(None)
    
  3. 这不会触发对象构造,但您可能不希望这样。请注意,在此示例中,我已将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