有这么一个类
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 吗? 有什么方法可以判断他们是相等或者不相等的?
1
jtsai OP Animal().die is Animal().die # true
Dog().die is Dog().die # False 应该这样就是对的了 |
2
jotsai 2017-05-22 11:05:51 +08:00 1
Dog()和 Cat()创建了 2 个不同的对象,所以 Dog().die is Cat().die 的结果是 False
Animal().die is Animal().die 的结果同理还是 False |
5
iyaozhen 2017-05-22 11:16:49 +08:00 via Android 1
@jtsai 可以通过类成员变量或者方法共享。
dog.__class__.die() == cat.__class__.die() |
7
pktangyue 2017-05-22 11:21:54 +08:00 1
首先你想问的是否相等其实是个很模糊的概念,是同一个定义呢?还是有相同个输出和返回?还是里面的代码一样?这些不同的情况都是不一样的。
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。 |
8
jtsai OP @pktangyue 我新描述了问题,到 https://www.v2ex.com/t/362915#reply0
|