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

希望对您有所帮助!