None 有时是假的
None is False sometimes
我不明白为什么 None 默认参数使用相同的语法打印两个不同的东西。
class LoaderForm(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
print("Parent is: " + str(parent))
self.button_Load.clicked.connect(self.load_project)
def load_project(self, projectname=None):
print("pojectname is: " + str(projectname))
>>> Parent is: None
>>> pojectname is: False
为什么?我仔细检查了几次代码,我找不到它的逻辑。值得一提的是,我注意到这试图在 load_project
方法中使用 projectname
的条件:
if projectname is None:
#do something
这当然行不通,因为 projectname 显然是无缘无故的 False。
函数是 Python 中的第一个 class 对象。它可以传递给另一个函数,就像任何其他对象一样。这正是 self.button_Load.clicked.connect(self.load_project)
.
正在发生的事情
所以你需要看看 self.button_Load.clicked.connect
对你的 self.load_project
方法做了什么。在这里,它传递了参数 False
,它覆盖了默认的 None
.
这里是重现您的问题的最小示例:
class MyClass():
def __init__(self):
self.connect(self.foo)
def connect(self, func):
func(False)
def foo(self, var=None):
print('Var is ' + str(var))
A = MyClass()
# Var is False
我认为 clicked
有一个带有默认值的参数,例如 clicked=false
转发给 load_project
并覆盖 projectname=None
我不明白为什么 None 默认参数使用相同的语法打印两个不同的东西。
class LoaderForm(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
print("Parent is: " + str(parent))
self.button_Load.clicked.connect(self.load_project)
def load_project(self, projectname=None):
print("pojectname is: " + str(projectname))
>>> Parent is: None
>>> pojectname is: False
为什么?我仔细检查了几次代码,我找不到它的逻辑。值得一提的是,我注意到这试图在 load_project
方法中使用 projectname
的条件:
if projectname is None:
#do something
这当然行不通,因为 projectname 显然是无缘无故的 False。
函数是 Python 中的第一个 class 对象。它可以传递给另一个函数,就像任何其他对象一样。这正是 self.button_Load.clicked.connect(self.load_project)
.
所以你需要看看 self.button_Load.clicked.connect
对你的 self.load_project
方法做了什么。在这里,它传递了参数 False
,它覆盖了默认的 None
.
这里是重现您的问题的最小示例:
class MyClass():
def __init__(self):
self.connect(self.foo)
def connect(self, func):
func(False)
def foo(self, var=None):
print('Var is ' + str(var))
A = MyClass()
# Var is False
我认为 clicked
有一个带有默认值的参数,例如 clicked=false
转发给 load_project
并覆盖 projectname=None