检查 Class __init__ 中 *args 的内容
Check the content of *args in a Class __init__
我想测试 *args 参数中是否是字符串 ti
。如果是这样,我想打印 "ti"
。如果它是第一个元素长度为 1 的列表,我想打印 "it is a list with len 1 values"。如果两者都不适用,我想打印 "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()
type(my_class.args)
是 tuple
所以你不能将它与单个值进行比较,即
if self.args == 'ti':
不过,您可以
if "ti" in self.args and len(self.args) == 1:
检查 "ti" 是否是唯一的输入。
*args
in def __init__(self, *args):
将导致 self.args
存储元组,因此第一个 if-statement 将始终是 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()
args
始终是元组,而不是列表,即使只有 1 个元素:
你不需要检查 self.args
是否是 tuple/list:
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')
self.args
就像@quamrana 提到的那样,总是 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()
希望对您有所帮助!
我想测试 *args 参数中是否是字符串 ti
。如果是这样,我想打印 "ti"
。如果它是第一个元素长度为 1 的列表,我想打印 "it is a list with len 1 values"。如果两者都不适用,我想打印 "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()
type(my_class.args)
是 tuple
所以你不能将它与单个值进行比较,即
if self.args == 'ti':
不过,您可以
if "ti" in self.args and len(self.args) == 1:
检查 "ti" 是否是唯一的输入。
*args
in def __init__(self, *args):
将导致 self.args
存储元组,因此第一个 if-statement 将始终是 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()
args
始终是元组,而不是列表,即使只有 1 个元素:
你不需要检查 self.args
是否是 tuple/list:
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')
self.args
就像@quamrana 提到的那样,总是 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()
希望对您有所帮助!