我有一个Animal类,其他动物继承自它(例如Sheep,Wolf)。
我想检查两个对象是否属于同一类,如果是,则应创建相同类的新对象;如果不是,则它们会打斗。
if x and y same object:
#create new object
else:
#fight
有比isinstance
更好的方法吗?
因为会有不止两种动物,我认为这样做不太有效率:
if isinstance(x, Wolf)
# ...
我有一个Animal类,其他动物继承自它(例如Sheep,Wolf)。
我想检查两个对象是否属于同一类,如果是,则应创建相同类的新对象;如果不是,则它们会打斗。
if x and y same object:
#create new object
else:
#fight
有比isinstance
更好的方法吗?
因为会有不止两种动物,我认为这样做不太有效率:
if isinstance(x, Wolf)
# ...
type(x) is type(y)
更有效率。 - Martijn Pietersdef fight(self, other): if not isinstance(self, Wolf): return NotImplemented
,等等。 - Martijn Pieters+
/__add__
运算符!此外,如果你将所有的动物都派生自同一个基类,你只需检查if not isinstance(other, type(self))
,它就会按照预期工作。事实上,这甚至让我觉得应该编写一个装饰器,以便可以定义只接受与包含类相同类型参数的方法! - Marcus Müller