一直听说过Python的Duck Typing,即"If it walks like a duck and quacks like a duck, it is a duck."。但是没有认真思考过这句话的含义。今天看到了对它的解释:
在Python中,如果我们想要调用一个对象的一个方法,其实,这个对象具体是什么类的实例并不重要,重要的是,这个对象所属的类有我们调用的这个方法(当然,指的是语义也类似,否则就是逻辑错误),这样,我们就可以正常使用这个对象,就好象它是我们在编写这行调用代码时“认为”的那种类型的对象一样。
仔细想一下,这是一种极端灵活的策略。在Java中,通常用“接口”这种类型来约束这样的一类对象,而在Python中,几乎没有任何预先的限制和约束。这样是好还是坏?是不是容易隐藏某些“类型错误”?如果这样,那么面向对象中“继承”所体现的“is-a”的关系还有什么用?
阅读(1384) | 评论(0) | 转发(0) |