[英]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.