Python:为什么 class 变量被赋值?

Python: Why does class variable get assigned?

这是我的代码:

class MyClass:

    def __init__(self):
        self.value = 0

    def set_value(self, value):
        self.value = 5

    def get_value(self):
        return self.value

    value = print("Hello")

a = MyClass()

输出为:

Hello

我不明白为什么 print("Hello") 会被执行。当我创建 class 的实例时,只有实例变量设置为 0。为什么 self.value = 0 调用 value = print("Hello")

谁能给我解释一下这种行为?

没有。该打印被执行是因为它本身处于 class 级别; class 的主体在定义 class 时执行。即使您从未实例化 MyClass,您也会得到该输出。

它不会,删除 a = MyClass() 无论如何它都会打印 "Hello"。当定义 class 时,它在正文中执行代码:

class MyClass:
    print(2 * 2)

# prints 4

不要让缩进欺骗了您。 value 不是实例变量。 value 是一个 class 变量,因为它是在 class 的范围内定义的。这与做的一样:

class MyClass:
    value = print("Hello")
    ....

这意味着对 print 的调用将 运行 在 class 定义时间 .换句话说,当 Python 定义了 MyClass 时,它也定义了所有 class 级别的变量——包括 value。要定义值,它会调用 print,这就是为什么在 之前 打印 Hello 你创建 MyClass.

实例的原因

如果您只想 MyClass 的实例打印 Hello,请将变量定义放在 class 构造函数中。

旁注: print 函数 returns None,所以将值赋给变量似乎有点奇怪.也许您正在寻找类似 input 的内容?

代码在执行时计算 class,并调用 print 定义 class 变量 value

下面的例子表明它是在实例化之前打印的。

class MyClass:

    def __init__(self):
        self.value = 0

    def set_value(self, value):
        self.value = 5

    def get_value(self):
        return self.value

    value = print("Hello")

print('hi')
a = MyClass()

#output
>>> Hello
>>>hi