为什么这会打印错误的东西?
Why does this print the wrong thing?
为什么打印“所以一定是:测试测试”而不是“所以一定是:你好,是我”
class bob():
subjectTemp='test'
levelTemp='test'
def setSubject(function_subject):
bob.subjectTemp=function_subject
print(bob.subjectTemp)
def setLevel(function_level):
bob.levelTemp=function_level
print(bob.levelTemp)
def join(subject=subjectTemp, level=levelTemp):
print("So it must be:", subject, level)
bob.setSubject("hello")
bob.setLevel("it's me")
bob.join()
默认值在函数定义时计算一次。这是新 Python 支持者在使用可变参数(例如列表)时偶然发现的一个经典问题 — 但这是同一陷阱的另一个实例。
您可以在 official documentation 中阅读有关默认参数的更多信息。
特别是:“重要警告:默认值仅计算一次”。
编辑:这是对您所问内容的技术解释,但请在此处阅读其他人的评论和答案。这是使用 Python 类 的一种特殊方式,它可能会绊倒你的腿。请 google 'Pythonic code' 和 'idiomatic code'.
直接的“问题”是这在函数定义时绑定:
def join(subject=subjectTemp, level=levelTemp):
subject
的值将是函数声明时subjectTemp
的值,不会改变。有关详细信息,请参阅 "Least Astonishment" and the Mutable Default Argument。
更大的问题是,这根本不是您使用 类 的方式。你想要这样的东西:
class Bob():
subject = 'test'
level = 'test'
def set_subject(self, subject):
self.subject = subject
print(self.subject)
def set_level(self, level):
self.level = level
print(self.level)
def join(self):
print("So it must be:", self.subject, self.level)
b = Bob()
b.set_subject("hello")
b.set_level("it's me")
b.join()
subjectTemp 和 levelTemp 具有默认值。
你可以这样写:
class bob():
subjectTemp='test'
levelTemp='test'
def setSubject(function_subject):
bob.subjectTemp=function_subject
print(bob.subjectTemp)
def setLevel(function_level):
bob.levelTemp=function_level
print(bob.levelTemp)
def join():
print("So it must be:", bob.subjectTemp, bob.levelTemp)
bob.setSubject("hello")
bob.setLevel("it's me")
bob.join()
为什么打印“所以一定是:测试测试”而不是“所以一定是:你好,是我”
class bob():
subjectTemp='test'
levelTemp='test'
def setSubject(function_subject):
bob.subjectTemp=function_subject
print(bob.subjectTemp)
def setLevel(function_level):
bob.levelTemp=function_level
print(bob.levelTemp)
def join(subject=subjectTemp, level=levelTemp):
print("So it must be:", subject, level)
bob.setSubject("hello")
bob.setLevel("it's me")
bob.join()
默认值在函数定义时计算一次。这是新 Python 支持者在使用可变参数(例如列表)时偶然发现的一个经典问题 — 但这是同一陷阱的另一个实例。
您可以在 official documentation 中阅读有关默认参数的更多信息。
特别是:“重要警告:默认值仅计算一次”。
编辑:这是对您所问内容的技术解释,但请在此处阅读其他人的评论和答案。这是使用 Python 类 的一种特殊方式,它可能会绊倒你的腿。请 google 'Pythonic code' 和 'idiomatic code'.
直接的“问题”是这在函数定义时绑定:
def join(subject=subjectTemp, level=levelTemp):
subject
的值将是函数声明时subjectTemp
的值,不会改变。有关详细信息,请参阅 "Least Astonishment" and the Mutable Default Argument。
更大的问题是,这根本不是您使用 类 的方式。你想要这样的东西:
class Bob():
subject = 'test'
level = 'test'
def set_subject(self, subject):
self.subject = subject
print(self.subject)
def set_level(self, level):
self.level = level
print(self.level)
def join(self):
print("So it must be:", self.subject, self.level)
b = Bob()
b.set_subject("hello")
b.set_level("it's me")
b.join()
subjectTemp 和 levelTemp 具有默认值。
你可以这样写:
class bob():
subjectTemp='test'
levelTemp='test'
def setSubject(function_subject):
bob.subjectTemp=function_subject
print(bob.subjectTemp)
def setLevel(function_level):
bob.levelTemp=function_level
print(bob.levelTemp)
def join():
print("So it must be:", bob.subjectTemp, bob.levelTemp)
bob.setSubject("hello")
bob.setLevel("it's me")
bob.join()