给出一个函数:
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
我的问题是:是否适合所有对象和类型?如果它失败了,你能告诉我它在什么情况下失败了吗?(我的导师从来没有给过这么简单的事情)非常感谢!
答案 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__ == A
为True
,而type(A()) == A
为旧式类的False
。
如果您使用的是Python 2,我建议您使用.__class__
代替type()
,以便处理自定义类型。如果你使用的是Python 3,你可以使用任何一种方法,因为那里有新风格的类。