繁体   English   中英

使用Python的isinstance

[英]Using Python's isinstance

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

我相信你想要这样:

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中删除。

那是因为'banana_cake'不是BananaCake的实例。

CakeFactory实现返回BananaCake CLASS,而不是BananaCake的实例。

尝试修改CakeFactory以返回“ BananaCake()”。 调用BananCake构造函数将返回一个实例,而不是类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM