在Python中是否有办法将参数设置为可选(忽略它就好像它不存在一样)?
我的意思是,假设你有一个类:
class RandomClass():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __str__(self):
return str(self.lst())
def lst(self):
return [self.x, self.y, self.z]
你尝试运行它:
r1 = RandomClass(1,2,3)
r1.lst()
[1, 2, 3]
print(r1)
[1, 2, 3]
这是有效的,但如果您尝试类似:r1 = RandomClass(1,2)
,它将会失败。
因此,如果设置参数是可选的,那么这些应该可以正常工作:
r1 = RandomClass(1,2)
r1 = RandomClass(1,2,3)
示例(假设z
设置为可选)然后:
r1 = RandomClass(1,2)
r1.lst()
[1, 2, None]
print(r1)
[1, 2, None]
如果没有使用,我将可选参数设置为None,但它可以是任何东西,如0,2等,以识别未使用的。
你认为这甚至可能吗?
答案 0 :(得分:2)
您可以将默认值设置为参数。在这种情况下,您希望用户可以提供或不提供z
。因此,如果用户为构造函数提供了2个参数,则可以将其默认值设置为None
:
class RandomClass(object):
def __init__(self, x, y, z=None):
self.x = x
self.y = y
self.z = z # here, z will be None if only 2 arguments are passed
# other methods...
[...]
>>> r1 = RandomClass(1,2)
>>> r1.lst()
[1, 2, None]
确保可选参数始终位于参数列表的末尾(不可能编写类似__init__(self, x=None, y, z)
的内容)。我建议您阅读本教程:Using Optional and Named Arguments,来自http://www.diveintopython.net/。
答案 1 :(得分:0)
这是一个示例方法,一个带有两个可选参数的函数:
def method(noDefault, arg1=10, arg2=1):
“arg1”和“arg2” 是可选的,因为它们定义了默认值。
“noDefault”是必需的,因为它有无默认值。
如果“method” 仅使用一个参数进行调用,则会发生以下情况: arg1默认为10
arg2默认为1 。
如果使用两个参数调用方法 ,则 arg2仍然默认为1.