js constructor 继承
function Animal(){
this.die = function() {}
}
dog = new Animal()
cat = new Animal()
dog.die === cat.die // false (实例间的属性没有共享)
js prototype 继承
function Animal(){
}
Animal.prototype.die = function() {}
dog = new Animal()
cat = new Animal()
dog.die === cat.die // ture (实例间的属性是共享的)
那么问题来了? python 的继承 ,实例间的属性和方法是共享的吗
class Animal():
def die(self):
pass
dog = Animal()
cat = Animal()
dog.die is cat.die ???
1
clino 2017-05-22 11:39:03 +08:00 1
话说直接测试一下不就知道了?
|
2
jmc891205 2017-05-22 11:49:20 +08:00 1
你这哪里是 Python 的继承。。。
你是想让 Dog 类继承 Animal 类? 那应该写 ````python class Dog(Animal): pass ```` 这个时候 Animal.die is Dog.die 是 True 你给的 python code 是实例化两个 Animal object。那 dog.die is cat.die 肯定是 False 啊。 |
3
pktangyue 2017-05-22 11:56:45 +08:00 1
js 是原型链继承,和 python 是比较常规的继承,这之间的实现本身就是不同的。
在你上一个帖子里我已经说了,基于你到底期望是怎样的,采用适合的方法就行了。 如果强行还要说的话,我感觉这不应该是面向对象思想中继承应该关注的事情。应该是关注子类是否继承父类的属性和行为,并且进行扩展。而无需关注是否相等。 |