python - 如何在 python 类中添加可选参数?
问题描述
我试图根据 rb_selection 的值调用不同的函数,如果 rb_selection 值为 0,则调用 func1,如果 rb_selection 值为 1,则调用 func2。这两个函数都采用不同的参数集。
调用 func1 时不需要文件夹参数(func2 值),同样,调用 func2 时也不需要批处理、术语参数(func1 值)
当我尝试调用第二个函数时,它会抛出以下错误,因为未传递批处理、术语的值。
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Himajak\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "<ipython-input-13-02b5f954b815>", line 122, in tb_click
ThreadedTask(self.queue,self.batch_name,self.term_name,self.course,self.rb_selection,self.folder).start()
AttributeError: 'GUI' object has no attribute 'batch_name'
代码与此类似:
class class1():
def def1(self):
self.queue = queue.Queue()
ThreadedTask(self.queue,self.rb_selection,self.batch_name,self.folder).start()
#self.master.after(10, self.process_queue)
class class2():
def __init__(self, queue,rb_selection, batch_name ,term_name, folder):
threading.Thread.__init__(self)
self.queue = queue
self.rb_selection = rb_selection
self.batch = batch_name
self.term = term_name
self.folder = folder
def func1(self,batch,term):
time.sleep(5)
print("Fucntion 1 reached")
print(self.batch,self.term)
def func2(self,folder):
time.sleep(5)
print("Function 2 reached")
print(self.folder)
def run(self):
time.sleep(0) # Simulate long running process
if self.rb_selection == '0':
self.func1(self.batch,self.term)
elif self.rb_selection == '1':
self.func2(self.folder)
self.queue.put("Task finished")
请建议如何解决此问题,在此先感谢!
解决方案
没有可选参数的概念,您可以在创建函数时提供默认值,例如
def __init__(self, queue,rb_selection ,term_name, folder, batch_name="default batch name"):
这样您就无需batch_name
在创建实例时通过。
推荐阅读
- php - 在 Codeigniter 中对来自不同服务器的两个数据库进行连接操作
- sql - 在 sql 表中查找坏字符
- jenkins - Jenkins输出字符串构建后
- mysql - 打开查询错误:(最大)预期数据长度为 100,而返回的数据长度为 14592
- php - 如何在codeigniter中使用ajax更新数据库中的图像?
- python - 具有动态滞后的窗口函数
- jenkins - Jenkins 不会运行我的 NUnit 测试,但 cmd 会
- java - JNI,我找不到内存泄漏的代码位置
- c# - C# RDLC 报告 - 直接到打印机 - 格式折叠
- ruby-on-rails - Rails:需要帮助了解连接表、嵌套表单、关联