python中的类中是不是有静态块

Posted

技术标签:

【中文标题】python中的类中是不是有静态块【英文标题】:Is there static block in class in pythonpython中的类中是否有静态块 【发布时间】:2011-12-14 08:41:57 【问题描述】:

我对 python 比较陌生 我想为一个类只运行一次代码块。就像java中的静态块一样。

例如:

class ABC:
    execute this once for a class.

python 中有没有这样的选项?

在java中我们是这样写的。这对一个类只执行一次,在加载类时。不是每个对象都创建

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

谢谢

【问题讨论】:

您不想将您的代码放在__init__ 函数中吗? 我猜没有。 init 在每个对象创建时被调用。我只需要它执行一次。 @root45:每个类的 instance 都会调用一次。 M S 要求每个班级调用一次的东西。 @Cpfohl 这就是我的想法,但我想我会澄清一下。 您是否尝试过您在问题中输入的内容?发生了什么? 【参考方案1】:

为此,只需将代码直接放在类定义下(与类的函数定义平行。

直接在类中的所有代码都会在类的命名空间中创建该类型时执行。示例:

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

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

只是为您填写最后一点信息:您的方法函数defs 也正在执行(就像在全局命名空间上定义函数时它们被“执行”一样),但它们没有叫。恰好执行def 没有明显可见的结果。

Python 的面向对象特性非常聪明,但您需要花点时间才能理解它!坚持下去,这是一种非常有趣的语言。

【讨论】:

请不要使用 self.y 访问静态变量/类变量。至少改用 Test.y 嗯,从来没有注意到我这样做了。固定。【参考方案2】:
>>> class MyClass():
...     print "static block was executed"
... 
static block was executed
>>> obj = MyClass()
>>>

有关 Python 中的静态变量/函数的更多信息,请参见此处:Static class variables in Python

【讨论】:

以上是关于python中的类中是不是有静态块的主要内容,如果未能解决你的问题,请参考以下文章

静态代码块在何时调用

static详谈

静态代码块

Java面向对象编程 -5.2

有继承关系的对象执行顺序,包括静态变量,静态代码块,普通变量,普通代码块,继承方法.

Java之静态代码块