Python“;isinstance“;使用类名而不是类型
我想检查对象或变量是否是指定类类型的实例,但使用的是该类的名称,而不是其类型。大概是这样的:Python“;isinstance“;使用类名而不是类型,python,Python,我想检查对象或变量是否是指定类类型的实例,但使用的是该类的名称,而不是其类型。大概是这样的: class A: pass class B(A): pass class C(B): pass c_inst = C() # Not working, isinstance expects the type: ok = isinstance(c_inst, 'A') 还有其他选择吗?我不想使用类名,因此在这种情况下,isinstance(c_inst,A)不可用。如果类名仅作为字符串,则可以这
class A: pass
class B(A): pass
class C(B): pass
c_inst = C()
# Not working, isinstance expects the type:
ok = isinstance(c_inst, 'A')
还有其他选择吗?我不想使用类名,因此在这种情况下,
isinstance(c_inst,A)
不可用。如果类名仅作为字符串,则可以这样做
>类Foo:pass
...
>>>foo=foo()
>>>foo.\uuuuu类\uuuuu.\uuuuuu名称\uuuuuuu=='foo'
真的
>>>foo.\uuuuu类\uuuuu.\uuuuuu名称\uuuuuu=='Bar'
假的
但是,这不是很可靠,因为Foo.\uuuuuu类\uuuuu.\uuuuuu名称\uuuuuuu
是可写的
>>foo.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
>>>foo.\uuuuu类\uuuuu.\uuuuuu名称\uuuuuuu=='foo'
假的
对于超类,您可以执行以下操作
foo.__class__.__name__ = 'X' or 'X' in {c.__name__ for c in foo.__class__.__bases__}
虽然这不会拾取
对象
以这种方式产生的,但请注意:您正在检查的类必须位于globals中,尽管:
import inspect
def isinstance_string(variable, string):
cls = globals().get(string, None)
class Unused:
pass
cls = cls or Unused
if inspect.isclass(cls):
return isinstance(variable, cls)
return False
class A: pass
class B(A): pass
class C(B): pass
c_inst = C()
ok = isinstance_string(c_inst, 'A')