← Back to team overview

oship-dev team mailing list archive

[Bug 606361] Re: several issues in class Element

 

If I understand correctly.  There doesn't need to be an __eq__
implementation at all.  The standard Python comparisons will correctly
return a boolean indicating the result of a comparison.  In the case of
__eq__ it will only return True if two objects are the same object.
This is the desired function; correct?

See: http://docs.python.org/release/2.3.5/ref/comparisons.html

If you WANT to compare only attribute values and not the entire object
identity. Then compare the __dict__ of the objects.

There is a good thread with examples at:
http://stackoverflow.com/questions/1227121/compare-object-instances-for-equality-by-their-attributes-in-python

-- 
several issues in class Element
https://bugs.launchpad.net/bugs/606361
You received this bug notification because you are a member of OSHIP
Development Team, which is subscribed to Open Source Health Information
Platform.

Status in Open Source Health Information Platform (OSHIP): New

Bug description:
Method __eq__ is not implemented correctly. It should return if two Element objects are equal according to some criterion and not whether an object is of type Element. The java implementers used equality of two elements based on the value attribute. I would prefer to use the attributes name and value. 
It is advisable to use in the __hash__ method the same attributes used in __eq__. There are two hash(self.uid) in the method body. I'd rather remove both and use only name and value.

There are three invariants that are not enforced in the initializer:
Is_null_valid: is_null = (value = Void)
Null_flavour_indicated: is_null xor null_flavour = Void
Null_flavour_valid: is_null implies terminology(Terminology_id_openehr).has_code_for_group_id
(Group_id_null_flavour, null_flavour.defining_code)
     Here we will have to use the internal openehr terminology service.

In the initializer, why no call the initializer of the superclass ?





References