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 中有很多额外的功能并且旧式类已被删除。
