簡體   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