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
而不是?