如何检查变量是否包含类型或类型列表?
我想传递一个类型或一个类型列表作为参数的函数。但在函数内,我需要区分类型和类型列表。粗略地解释我需要某种形式的分支这样的:如何检查变量是否包含类型或类型列表?
if //someVar is a type//:
....
elif isinstance(someVar, list):
for t in list:
if //t is a type//:
....
else:
print("ERROR")
else
print("ERROR")
类型可以是一些“原始”像INT或STR也是元组或班级为好。
问题:我该如何正确而有效地类型和类型列表区分?
你需要提供一个tuple
到isinstance
包含你认为是适当的“原始”的类型。对于列表,您只需通过list
。
如果您需要处理“类和”你需要在元组明确添加这些课程,因为在Python中(至少在Python 3
没有ClassType
,在Python 2
老式类有一个普通类型)。
因此,给出的例子类Bar
,这里是你将如何让str
,int
S,tuple
S和Bar
为“原始”,同时进一步检查列表:
class Bar: pass
def foo(arg):
if isinstance(arg, (int, str, tuple, Bar)):
print("type str or int or tuple or Bar")
elif isinstance(arg, list):
print("a list")
else:
print("Error")
功能foo
现在使这些区别对你:
>>> foo(1)
type str or int or tuple or Bar
>>> foo([1])
a list
>>> foo(Bar())
type str or int or tuple or Bar
>>> foo(foo)
Error
进一步elif
子句中的分支为list
s的同样performe d。
没有类的常见类型...这很不方便。某些代码不能显式检查所有存在的类。请参阅上面提供的附加信息作为对我的问题的评论。你有什么想法如何实现这一目标?我需要明确地区分表示类型的对象(f.e.列表)和该类型的实例(f.e.类型的列表)。 –
@Regis用户可以提供什么arg?输入:'foo(list)','foo(int)'属于“single”类型,而'foo([int,str,tuple])'属于'type'的'list'类别? –
对不起,是的。 Jim给出了正确的提示:我可以将元组或单值传递给isinstance()。所以我可以实现我想要的。我可以完全跳过分支,因为这是通过isinstance()本身完成的!谢谢你的回答,吉姆! –
你能解释一下你想要做的事情吗?你是否看过'isinstance' /'issubclass'? – jonrsharpe
你需要明确检查'list's?另外,什么*不符合您的类型? –
澄清:我的意图是将类型信息传递给类型验证方法。我想给用户一些自由如何指定传递给这个方法的类型约束。因此,我希望允许他指定单一类型或类型列表(并且最终在将来还有其他一些选项)。因此,提供的信息将存储在一个变量中。因此,为了正确处理用户提供的信息,我需要在代码中进行某种分支。 –