
有这么一个类
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 年 5 月 22 日 Dog()和 Cat()创建了 2 个不同的对象,所以 Dog().die is Cat().die 的结果是 False Animal().die is Animal().die 的结果同理还是 False |
5 iyaozhen 2017 年 5 月 22 日 via Android @jtsai 可以通过类成员变量或者方法共享。 dog.__class__.die() == cat.__class__.die() |
7 pktangyue 2017 年 5 月 22 日 首先你想问的是否相等其实是个很模糊的概念,是同一个定义呢?还是有相同个输出和返回?还是里面的代码一样?这些不同的情况都是不一样的。 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 我新描述了问题,到 t/362915#reply0 |