检查__init__类中* args的内容

时间:2019-05-28 14:21:00

标签: python args

我想测试* 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()

4 个答案:

答案 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)

像@quamrana提到的那样,

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()

希望这会有所帮助!