V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jtsai
V2EX  ›  问与答

求助一个 Python 的继承问题

  •  
  •   jtsai · 2017-05-22 11:37:18 +08:00 · 1125 次点击
    这是一个创建于 2749 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 ???
            
    
    4 条回复    2017-05-22 11:59:45 +08:00
    clino
        1
    clino  
       2017-05-22 11:39:03 +08:00   ❤️ 1
    话说直接测试一下不就知道了?
    jmc891205
        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 啊。
    pktangyue
        3
    pktangyue  
       2017-05-22 11:56:45 +08:00   ❤️ 1
    js 是原型链继承,和 python 是比较常规的继承,这之间的实现本身就是不同的。

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

    如果强行还要说的话,我感觉这不应该是面向对象思想中继承应该关注的事情。应该是关注子类是否继承父类的属性和行为,并且进行扩展。而无需关注是否相等。
    jtsai
        4
    jtsai  
    OP
       2017-05-22 11:59:45 +08:00
    @pktangyue 掉 js 坑里了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2557 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:58 · PVG 12:58 · LAX 20:58 · JFK 23:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.