求助一个 Python 面对对象的问题

2017-05-22 10:44:22 +08:00
 jtsai

有这么一个类

class Animal():
	def die(self):
    	pass


class Dog(Animal):
	pass
    
class Cat(Animal):
	pass
    
print(Dog().die is Cat().die) # False
print(Dog().die is Dog().die) # False

请问 Dog().die 等于 Cat().die 吗? 有什么方法可以判断他们是相等或者不相等的?

1151 次点击
所在节点    问与答
9 条回复
jtsai
2017-05-22 10:59:51 +08:00
Animal().die is Animal().die # true
Dog().die is Dog().die # False
应该这样就是对的了
jotsai
2017-05-22 11:05:51 +08:00
Dog()和 Cat()创建了 2 个不同的对象,所以 Dog().die is Cat().die 的结果是 False
Animal().die is Animal().die 的结果同理还是 False
jtsai
2017-05-22 11:07:26 +08:00
@jotsai @jtsai 噢 我刚刚搞错了,Animal().die is Animal().die 等于 False
jtsai
2017-05-22 11:08:31 +08:00
@jotsai 实例与实例之间的属性和方法没有共享的吗?
iyaozhen
2017-05-22 11:16:49 +08:00
@jtsai 可以通过类成员变量或者方法共享。
dog.__class__.die() == cat.__class__.die()
jtsai
2017-05-22 11:21:24 +08:00
@iyaozhen Dog.__class__.die() Dog.__class__.die 报错
pktangyue
2017-05-22 11:21:54 +08:00
首先你想问的是否相等其实是个很模糊的概念,是同一个定义呢?还是有相同个输出和返回?还是里面的代码一样?这些不同的情况都是不一样的。

http://stackoverflow.com/questions/20059011/check-if-two-python-functions-are-equal

在这里有看到一个方法是你可以用 Dog().die.__code__.co_code == Cat().die.__code__.co_code 来比较,但这个貌似是比较的方法里面的 bytecode (我理解的可能是方法中执行的代码是一样的)。

或者也可以这样比较 Dog().die.__code__ == Cat().die.__code__。这个是比较定义的。

比如重新定义

class Cat(Animal):
def die():
pass

这时 Dog().die.__code__.co_code == Cat().die.__code__.co_code 是 True。Dog().die.__code__ == Cat().die.__code__ 是 False。
jtsai
2017-05-22 11:38:29 +08:00
@pktangyue 我新描述了问题,到 https://www.v2ex.com/t/362915#reply0
GjriFeu
2017-05-22 17:35:42 +08:00
@jtsai 用 c++理解的话 die(dog(),) == die(cat(),) 符号是不一样的

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

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

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

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

© 2021 V2EX