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

问题描述:

这里是我的代码:Python:为什么类变量被赋值?

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")得到执行。当我创建类的实例时,只有实例变量设置为0.为什么self.value = 0调用value = print("Hello")

有人能解释我这种行为吗?

代码在执行时评估类,并调用print来定义类变量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 

它没有。该印刷品因其处于课堂级别而被执行;类的主体在定义类时执行。即使您从未实例化MyClass,您也会得到该输出。

它没有,掉落a = MyClass(),反正它会打印"Hello"。当一个类被定义时,它在主体中执行代码:

class MyClass: 
    print(2 * 2) 

# prints 4 

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

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

这意味着调用print将在类定义时运行。换句话说,当Python定义MyClass时,它还定义了所有的类级变量 - 包括value。要定义值,它会调用print,这就是为什么Hello在之前打印您创建MyClass的实例。

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

旁注:print函数返回None,所以它看起来有点怪,你的分配值给一个变量。也许你正在寻找像input而不是?