Python中的类是否有静态块?

22

我对Python比较陌生,我想只在类中运行一次代码块,就像Java中的静态块。

例如:

class ABC:
    execute this once for a class.

Python中是否有类似的选项?

在Java中,我们会这样写。它只会在类被加载时执行一次,而不是在每个对象创建时都执行。

public class StaticExample{
    static {
        System.out.println("This is first static block");
    }
}

谢谢


1
你不想把代码放在__init__函数里吗? - Kris Harper
5
我猜__init__在每次对象创建时都会被调用。我希望它只执行一次。 - M S
1
@root45:这将会在类的每个实例中被调用一次。M S 正在寻求一个在每个类中只被调用一次的东西。 - Chris Pfohl
1
@Cpfohl 那是我想的,但我觉得我应该澄清一下。 - Kris Harper
2
你试过在问题中输入的内容了吗?发生了什么事? - johnsyweb
2个回答

25

要实现这个功能,只需将代码直接放在类定义下面(与该类的函数定义并列即可)。

所有直接放在类中的代码将在该类型创建时在类名称空间中执行。例如:

class Test:
    i = 3
    y = 3 * i
    def testF(self):
        print Test.y

v = Test()
v.testF()
# >> 9

仅为您补充最后一点信息:您的方法函数def也会被执行(就像在全局命名空间定义函数时它们被"执行"一样),但它们不被调用。只是def的执行没有明显可见的结果。

Python 的面向对象性相当巧妙,但需要一些时间来理解!继续努力,这是一种非常有趣的语言。


请勿使用self.y访问静态变量/类变量。至少使用Test.y。 - Artur
哦,从来没有注意到我这样做了。已修复。 - Chris Pfohl

13
>>> class MyClass():
...     print "static block was executed"
... 
static block was executed
>>> obj = MyClass()
>>>

请点击Python中的静态变量/函数以获取更多相关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接