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
这是我的代码:
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