是否有任何方法檢查兩個對象是否具有相同的值,而不是遍歷其屬性並手動比較它們的值?比較兩個對象
比較兩個對象
回答
@Joe金頓公司的解決方案工作,如果有一個__dict__
(一些對象,包括內建命令,沒有之一),__eq__
作品(一寫的不好__eq__
mayraise異常等)兩種類型的字典的所有值。但這是非常不可寬恕的。它甚至沒有正確處理名義上的亞型......更少的結構亞型(即你可以使用的類型/用於鴨式打字)。 不要這樣做。
但通常情況下,您最好使用手工定製的__eq__
方法,該方法只比較一些重要的屬性。例如。理性只應該比較分子和分母,僅此而已。
「一些無意義的比較可能會引發異常」:nope,這僅適用於涉及排序的比較 - 檢查「a」是否等於b(即,「a == b」,表達或暗示)**永不**原因異常(除非你故意編寫一個奇怪的類來覆蓋'__eq__',僅僅是爲了引起這樣的異常;-)。 IOW,平等/不平等的比較**從不**「無意義」。 – 2010-08-23 18:29:37
@Alex Or除非有人編寫這樣的類。寫得很差的課程經常發生。但是,delnan似乎意味着一些內建類型以這種方式表現出來,這確實是不正確的。 – 2010-08-23 18:37:03
是的,內置的不這樣做。對不起,如果它是這樣讀的。 – delnan 2010-08-23 18:41:12
object1.__dict__ == object2.__dict__
應該是你所需要的,我想......
編輯:vars(object1) == vars(object2)
也許是更Python了一下,雖然@delnan使有關對象(例如int
s)表示,沒有一個有效的點__dict__
。我不同意自定義__eq__
對於簡單情況是一種更好的方法,但是......有時候,如果快速和骯髒完美地完成你所需要的,i.m.h.o.
,闡述對delnan的回答是:
3210您可以直接比較namedtuple。
否則,您必須定義無論是你自己豐富的比較__eq__
和可能__ne__
或您自己的__cmp__
看到datamodel更多信息
- 1. 比較兩個對象
- 2. 比較兩個JSON對象
- 3. 比較兩個對象,java
- 4. 比較兩個對象
- 5. 比較兩個NSNumber對象
- 6. 比較兩個datetime對象
- 7. 比較兩個JavaScript對象
- 8. 比較兩個DateTimeOffset對象
- 9. Subsonic比較兩個對象
- 10. 比較兩個Doctrine_Record對象
- 11. 比較兩個JSON對象
- 12. 比較兩個對象。
- 13. 比較兩個stdClass對象
- 14. 比較兩個Linq對象
- 15. 如何兩個對象比較對象
- 16. 比較兩個對象的類型Microsoft.AnalysisServices.MajorObject
- 17. 比較兩個對象是在MbUnit的
- 18. 比較兩個對象集合
- 19. 比較兩個Joda-Time DateTime對象
- 20. Nunit 2.5.10 - 無法比較兩個對象
- 21. 在anylogic中比較兩個對象
- 22. 將兩個對象比較爲Array;
- 23. 比較兩個PHP對象 - PHP和OBJECTS
- 24. 如何比較兩個對象數組?
- 25. 比較兩個JavaScript對象的鍵
- 26. 如何比較兩個Struct對象?
- 27. 比較兩個繼承對象Ruby
- 28. 如何比較兩個對象數組
- 29. 比較Laravel中的兩個對象
- 30. 如何打字比較兩個對象?
參見[這類似的問題(http://stackoverflow.com/問題/ 390250 /優雅的方式支持等價 - 在Python中的類相等) – GreenMatt 2010-08-23 18:28:08