Python:如果obj具有完全类型t,则返回true

时间:2014-09-20 04:31:57

标签: python

给出一个函数:

def my_func(obj, t)

我的工作是编写函数,以便在 obj 具有 t 类型时返回true。 它与isinstance不同。比如,当my_func为true时,isinstance总是为true,但反之亦然。

For example:
isinstance(True, int) = True;
myFunc(True, int) = False;

到目前为止我的代码是:

def my_func(obj, t):
    return obj.__class__ == t

我的问题是:是否适合所有对象和类型?如果它失败了,你能告诉我它在什么情况下失败了吗?(我的导师从来没有给过这么简单的事情)非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以使用Python中的type function进行检查。如果类与True具有完全相同的类型,它将仅返回t

def my_func(obj, t):
    return type(obj) == t

答案 1 :(得分:1)

请注意,您使用的类的样式与此相关。 Python 3使用新式类,Python 2能够使用旧式类和新式类。 Python 2解释器中的一些相关表达式如下所示:

>>> class A: pass; # old-style class (default style in py2)
...
>>> class B(object): pass; # new-style class (default style in py3)
...
>>> type(A())
<type 'instance'>
>>> A().__class__
<class __main__.A at 0x01DC97A0>
>>> type(B())
<class '__main__.B'>
>>> B().__class__
<class '__main__.B'>

这里要注意的关键点是,对于新式类,使用.__class__确实等同于内置type函数,但对于旧式类type(A()) != A().__class__。这是因为A().__class__ == ATrue,而type(A()) == A为旧式类的False

如果您使用的是Python 2,我建议您使用.__class__代替type(),以便处理自定义类型。如果你使用的是Python 3,你可以使用任何一种方法,因为那里有新风格的类。