2015-10-23 3 views
0

Какова основная разница между Примитивным сравнением типа и сравнением объектовPython примитивных типов Сравнения в/с сравнением объекта

Я хочу, чтобы сравнить две даты, и это легко сделать с помощью примитивных типов, то почему я должен создать объект для этого и сравнить объекты?

import datetime 
fmt = '%Y-%m-%d' 
d = '2015-10-23' 
e = '2015-10-23' 
d == e ==> True 

d1 = datetime.datetime.strptime(d,fmt) 
d2 = datetime.datetime.strptime(e,fmt) 
d1 == d2 ==> True 

d = '2015-10-03' 
e = '2015-10-04' 
d > e ==> False 
e > d ==> True 

Если примитивные типы работают отлично, то зачем нам создавать объект для этого?

Какой из них лучше использовать?

+4

Если ваши даты в том же самом разумном формате, то сравнение строк (и даже лексикографическое упорядочение) будут работать нормально, но * что, если они» re not *? И что, если вы хотите, например, вычесть их, чтобы узнать «timedelta» между ними; удачи делать это со строками. – jonrsharpe

ответ

1

Сравнение примитивного типа может привести к ложному ответу результата, когда есть дата в нечувствительном формате.

например

d = '2015-33-03' 
e = '2015-32-32' 
print(d > e) 
print(e > d) 
1

формат вы перечислили называется isoformat.

Вы можете увидеть это, позвонив по телефону dateObj.isoformat().

В формате ISO (yyyy-mm-dd) вы действительно сравниваете строковый эквивалент даты, который, таким образом, дает вам тот же результат, что и сравнение строк, и нет ничего плохого в используя это.

Сравнивая дату непосредственно со своим коллегой, вероятно, будет считаться «более безопасным» b/c, возможно, что вы предоставите несовместимые строковые форматы и получите неправильные результаты (пример: сравнение 2015-10-01 с 2015-19-01).

Наконец, чтобы ответить на ваш общий вопрос об объектном сравнении, для вашего собственного объекта вам необходимо определить правильные функции __hash__ и __eq__. Также Google: Питон functools.total_ordering для более подкованного материала сравнения на пользовательских объекты

https://docs.python.org/2/library/functools.html

Смежные вопросы