Как проверить равенство классов в Python 2.5?

#python #class #equality #python-2.5

#python #класс #равенство #python-2.5

Вопрос:

Я просмотрел документацию по Python 2.5 и не смог найти ответа на этот: Как мне проверить, относится ли объект к тому же классу, что и другой объект?

 def IsClass(obj1, obj2):
     return obj1.class == obj2.class #doesn't work
  

Ответ №1:

Вы можете использовать

 type(obj1) is type(obj2)
  

Обратите внимание, что обычно вы пытаетесь избежать проверки типов в Python, а скорее полагаетесь на утиный ввод.

Комментарии:

1. Последнее предложение должно быть выделено жирным шрифтом. И красный, если markdown поддерживает это. Это не может быть достаточно растянуто. Если вы считаете, что вам это нужно, вы, скорее всего, этого не делаете и должны просто использовать привязку к утке.

2. Вам также следует рассмотреть возможность использования issubclass() or isinsntance() , когда вас интересуют реальные типы, поскольку в большинстве случаев, когда вы ищете foo , вы также приняли бы подкласс foo .

3. Прошло много времени, но вы помните, какую версию Python вы использовали для проверки своего ответа? Возможно, вам следует добавить большое жирное примечание о том, что ответ может не относиться к другим версиям. Например. он не будет работать для Python 2.7 (по умолчанию во многих системах с 2016 года). Но это работает с Python 3.4 и 3.5.

4. @m000: Это определенно работает в Python 2.7. На самом деле это должно работать в любой версии Python, когда-либо. Обратите внимание, что это проверяет идентичность типа, что в большинстве ситуаций не то, что вам нужно. Также прочитайте первые два комментария к этому ответу.

5. @SvenMarnach Проблема, похоже, в классах в стиле старого и нового стилей. Вики. python.org/moin/NewClassVsClassicClass Я использовал этот тестовый код: pastebin.com/nmpYJdGJ Для python 2.7 type(obj) сравнение работает только с классами нового стиля . Т.е. ваши классы должны расширяться object . Классы старого стиля были заменены с Python 2.2, но при их использовании интерпретатор не выдает предупреждений. Сравнение __class__ свойства, похоже, работает независимо от стиля классов.

Ответ №2:

Я думаю, что вы хотите сделать, это использовать type (obj). 🙂

-РЕДАКТИРОВАТЬ- Похоже, он меня опередил. И он прав насчет набора текста уткой.