Skip to main content
 首页 » 编程设计

python之使用 Python 的 isinstance

2025年05月04日10lori

isinstance 的以下用法似乎在 Python 2.5.2 或 2.6.2 中不起作用:

class BananaCake: 
    def __init__(self): 
        print 'Banana Cake' 
 
class ChocolateCake: 
    def __init__(self): 
        print 'Chocolate Cake' 
 
class CakeFactory: 
    @staticmethod 
    def create(name): 
        if name == 'banana': 
            return BananaCake 
        elif name == 'chocolate': 
            return ChocolateCake 
        else: 
            return None 
 
if __name__ == '__main__': 
    banana_cake = CakeFactory.create('banana') 
    print isinstance(banana_cake, BananaCake) 

上面的 isinstance 返回 False,即使 banana_cake 是 BananaCake 的一个实例。有谁知道我可能会错过什么?我正在我的测试脚本中执行此检查。您应该能够复制和粘贴以上内容并在 Python 脚本中轻松运行它。

请您参考如下方法:

您返回的是类而不是实例。

>>> banana_cake is BananaCake 
True 

I believe you want this:

class CakeFactory: 
    @staticmethod 
    def create(name): 
        if name == 'banana': 
            return BananaCake()         # call the constructor 
        elif name == 'chocolate': 
            return ChocolateCake()      # call the constructor 
        else: 
            return None 

要使 isinstance() 与类一起工作,您需要将它们定义为新式类:

class ChocolateCake(object): 
    pass 

无论如何,您应该将所有类声明为新式类,Python 3 中有很多额外的功能并且旧式类已被删除。