Можно попытаться использовать свойство объекта и поймать получающийся NullReferenceException. Если свойство, которое Вы пробуете, наследовано или переопределено от Объекта, то это работает на любой класс.
public static bool operator ==(Foo foo1, Foo foo2)
{
// check if the left parameter is null
bool LeftNull = false;
try { Type temp = a_left.GetType(); }
catch { LeftNull = true; }
// check if the right parameter is null
bool RightNull = false;
try { Type temp = a_right.GetType(); }
catch { RightNull = true; }
// null checking results
if (LeftNull && RightNull) return true;
else if (LeftNull || RightNull) return false;
else return foo1.field1 == foo2.field2;
}
Помните, что точечная нотация в шаблоне Django используется для четырех разных нотаций в Python. В шаблоне foo.bar
может означать любое из:
foo[bar] # dictionary lookup
foo.bar # attribute lookup
foo.bar() # method call
foo[bar] # list-index lookup
Он пробует их в указанном порядке, пока не найдет совпадение. Итак, foo.3
предоставит вам индекс вашего списка, потому что ваш объект не является dict с ключом 3, не имеет атрибута с именем 3 и не имеет метода с именем 3.
Вы можете получить доступ к элементам последовательности с помощью arr.0 arr.1 и так далее. См. Глава о системе шаблонов Django книги django для получения дополнительной информации.