求助一个 Python 的继承问题

2017-05-22 11:37:18 +08:00
 jtsai

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 ???
        
1119 次点击
所在节点    问与答
4 条回复
clino
2017-05-22 11:39:03 +08:00
话说直接测试一下不就知道了?
jmc891205
2017-05-22 11:49:20 +08:00
你这哪里是 Python 的继承。。。
你是想让 Dog 类继承 Animal 类?
那应该写
````python
class Dog(Animal):
pass
````
这个时候 Animal.die is Dog.die 是 True

你给的 python code 是实例化两个 Animal object。那 dog.die is cat.die 肯定是 False 啊。
pktangyue
2017-05-22 11:56:45 +08:00
js 是原型链继承,和 python 是比较常规的继承,这之间的实现本身就是不同的。

在你上一个帖子里我已经说了,基于你到底期望是怎样的,采用适合的方法就行了。

如果强行还要说的话,我感觉这不应该是面向对象思想中继承应该关注的事情。应该是关注子类是否继承父类的属性和行为,并且进行扩展。而无需关注是否相等。
jtsai
2017-05-22 11:59:45 +08:00
@pktangyue 掉 js 坑里了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362915

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX