有没有办法在python类中有可选的参数,不必定义?

时间:2018-03-21 13:49:57

标签: python python-3.x oop

我正在制作一个面向对象的文本冒险引擎代码,我的主要目标是使其用户友好,但功能强大。代码中的一个类目前需要15个参数。但是,在类的每个实例中,实际上只定义了少数参数,其中许多参数最终都留空了。

为了创建更简洁的代码,并使使用引擎的体验更加用户友好,我想知道是否有任何方法可以使类中的某些参数可选填写。这样做的目的是,当您创建所述类的实例时,您只需要为该特定实例定义所需的参数,而不必将所有其他参数定义为无值。

换句话说,我想知道这是否可行:

class sampleClass:
    def __init__(self, arg1, optional1)
        self.arg1 = arg1
        self.optional1 = optional1

var = sampleClass(value)
var = sampleClass(value2, value3)

在上述情况下,可以定义“optional1”变量,也可以将其留空。

我也查看了这个网站上* args和** kwargs的帖子,在我看来,两个参数都可以采用多个值,但是没有一个可以选择不采用任何值。

总之,是否可以在python类中拥有完全可选的参数,可以定义或留空并且不会产生错误消息?

另外,对不起我在这篇文章中所做的任何错误。这是我关于Stack Overflow的第一个问题,所以我是网站的新手。请告诉我,如果有什么我可以提出来提出更好的问题。

3 个答案:

答案 0 :(得分:2)

类init方法与任何其他函数相同,其参数默认为None。

def __init__(self, arg1, optional1=None):

答案 1 :(得分:1)

  

我也查看了这个网站上* args和** kwargs的帖子,在我看来,两个参数都可以采用多个值,但是没有一个可以选择不采用任何值。

这不正确。

>>> def f(*args, **kwargs):
...   print("Args: %r" % (args,))
...   print("Kwargs: %r" % (kwargs,))
...
>>> f()
Args: ()
Kwargs: {}

答案 2 :(得分:0)

试试这个: Use of *args and **kwargs

** kwargs允许您将keyworded变量长度的参数传递给函数。如果要在函数中处理命名参数,则应使用** kwargs。

def manyArgs(*arg):
    print("Was called with ", len(arg), " arguments: ", arg)

def main():
    manyArgs()

if __name__ == "__main__":
    main()

如果我在没有任何参数的情况下运行它,则会打印以下行:

Was called with  0  arguments:  ()