我想测试* args参数中是否为字符串ti
。如果是这样,我要打印"ti"
。如果它是第一个元素的长度为1的列表,我想打印“它是具有len 1个值的列表”。如果两者都不适用,我要打印"full list"
这是我的代码,它不打印任何内容,我也不知道为什么。有人可以帮我吗?
class MyClass:
def __init__(self, *args):
self.args = args
def test_meth(self):
if self.args == 'ti':
print('ti')
elif type(self.args) == list:
if len(self.args[0]) == 1:
print('it is a list with len 1 values')
else:
print('full list')
my_class = MyClass('ti')
my_class.test_meth()
答案 0 :(得分:3)
args
始终是一个元组,而不是列表,即使只有1个元素也是如此:
您无需检查self.args
是否为元组/列表:
def test_meth(self):
if len(self.args) == 1 and 'ti' in self.args:
print('ti')
if self.args and len(self.args[0]) == 1:
print('list with length 1 len values')
else:
print('full list')
答案 1 :(得分:1)
type(my_class.args)
是tuple
,因此您不能将其与单个值进行比较,即
if self.args == 'ti':
但是,您可以做到
if "ti" in self.args and len(self.args) == 1:
检查“ ti”是否是唯一输入。
答案 2 :(得分:1)
*args
中的 def __init__(self, *args):
将导致self.args
存储元组,因此第一个if语句将始终为False
。如果您希望代码正常工作,则应将其重写为:
class MyClass:
def __init__(self, *args):
self.args = args
def test_meth(self):
if self.args == ('ti',):
print('ti')
elif len(self.args) == 1 and len(self.args[0]) == 1:
print('it is a list with len 1 values')
else:
print('full list')
my_class = MyClass('ti')
my_class.test_meth()
或更通用(与任何可迭代的args
一起使用):
class MyClass:
def __init__(self, *args):
self.args = args
def test_meth(self):
if len(self.args) == 1 and self.args[0] == 'ti':
print('ti')
elif len(self.args) == 1 and len(self.args[0]) == 1:
print('it is a list with len 1 values')
else:
print('full list')
my_class = MyClass('ti')
my_class.test_meth()
答案 3 :(得分:0)
self.args
始终为tuple
类型,因此永远不等于'ti'
或list
类型。这就是为什么您当前的代码不显示任何内容的原因。
我相信您所做的描述如下:
class MyClass:
def __init__(self, *args):
self.firstarg = args[0]
def test_meth(self):
if self.firstarg == 'ti':
print('ti')
elif type(self.firstarg) == list:
if len(self.firstarg) == 1:
print('it is a list with 1 value')
else:
print('full list')
my_object = MyClass('ti')
my_object.test_meth()
my_object = MyClass(['ti'])
my_object.test_meth()
my_object = MyClass(['ti', 'ti'])
my_object.test_meth()
希望这会有所帮助!