我有一个班级,__init__
函数做了很多东西,这就是我需要的。
所以我真的只想调用这个类的__init__
函数。如何在不将其分配给变量的情况下执行此操作?
答案 0 :(得分:6)
假设您的班级名为Foo
,您可以执行以下操作:
Foo()
但是,如果您需要这样做,可能表明您需要重新考虑您的设计。
答案 1 :(得分:3)
首先,这显然是一个设计错误 - 代码应该只是一个独立的功能。
但是,有几种方法可以做到这一点:
正常实例化 - 没有理由必须将表达式的结果赋给变量。但是,这将导致完整的对象构造(此后不久可能会破坏)。
Foo()
调用基础函数:
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