0

我得到了一些与此类似的代码。不完全是,但我不会做太多,但我需要check_type接受r_type参数作为字符串并检查对象类型是否具有此字符串的值。可行吗?!?!?

我重复不能这样做:n.check_type(r_type=Newer)*,我需要从配置文件中获取r_type值,这就是一个字符串!

    class New(object):
        def check_type(self, r_type):
            print 'is instance of r_type: ', isinstance(self, r_type)
            return isinstance(self, r_type)

    class Newer(New):
        pass

    if __name__ == '__main__':
        n = Newer()
        n.check_type(r_type='Newer')

输出:

        print 'is instance of r_type: ', isinstance(self, r_type)
    TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
4

2 回答 2

3

您可以使用全局字典通过其名称获取实际类并使用它来检查 isinstance

>>> class New(object):
        def check_type(self,r_type):
            result = isinstance(self,globals()[r_type])
            print "is instance of r_type: ",result
            return result


>>> class Newer(New):
        pass

>>> n=Newer()
>>> n.check_type("Newer")
is instance of r_type:  True
True
>>> 
于 2016-02-17T11:50:35.857 回答
0

isInstance您可以直接比较类型的名称,而不是尝试调用:

class New(object):
    def check_type(self, r_type):
        return str(type(self)) == r_type

class Newer(New):
    pass

if __name__ == '__main__':
    n = Newer()
    print n.check_type(r_type="<class '__main__.Newer'>")

显然,您可能希望修改类型名称以仅提取类型的基本名称并进行比较,以便于指定:)

于 2016-02-17T11:49:29.087 回答