如何在 python 类中添加可选参数?

Posted

技术标签:

【中文标题】如何在 python 类中添加可选参数?【英文标题】:How to add optional arguments in a python class? 【发布时间】:2020-08-06 16:08:41 【问题描述】:

我试图根据 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")

请就如何解决此问题提出建议,在此先感谢!

【问题讨论】:

【参考方案1】:

没有可选参数的概念,你可以在创建函数时给出默认值,比如

def __init__(self, queue,rb_selection ,term_name, folder, batch_name="default batch name"):

这样您在创建实例时无需传递batch_name

【讨论】:

通过可选参数我的意思是这些变量并不总是被两个函数调用,所以我使用了这个术语。谢谢指正!!我已经尝试使用您提到的一些默认值定义它,它不起作用并引发相同的错误。 您在class1 中遇到的错误是因为未定义该变量。

以上是关于如何在 python 类中添加可选参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jquery 中向 cloudinary 文件上传()添加可选参数?

Spring StoredProcedure 可选参数

Python 通用可选参数

python类中可以建立任意多参数吗?

Python 2.7 argparse:如何正确嵌套可选的互斥参数?

python如何将可选参数或关键字参数从一个函数传递到另一个函数?