Comparing objects in a conditional, Python 3 -


i have following code in program used append setting list or if in list remove it. if setting has value should sent self.commit_setting , if not self.commit_setting passed. wise removing setting except instead of committing setting undoes it.

    no_color = gdk.rgba(red=0.000000, green=0.000000, blue=0.000000, alpha=1.000000)      if setting in self.setting_lst:         self.setting_lst.remove(setting)  # if setting in list remove          # note: get_rgba() returns gdk.rgba object         if self.get_rgba() == no_color:  # if value not set pass             pass         else:             self.undo_setting()     else:         self.setting_lst.append(setting)  # add setting list if not in         if self.get_rgba() == no_color: # if value not set pass             pass         else:             self.commit_setting() 

currently code working fine me simplify using if out else, implying if condition not met else. put:

        if self.get_rgba() != no_color:            self.commit_setting() 

unfortunately when self.commit_setting() or undo_setting() executed if color equal no_color. why this? "!" operator not work comparing objects?

assuming , self.get_rgba() , no_color return objects (instances) of same class . can have class overwrite __eq__ function internally called when checking equality , __ne__ not equality -

def __eq__(self, other):      return self.somethings = other.somethings def __ne__(self, other):     return not self.__eq__(other) 

you can define 1 of these (you not need define both).

edit:

also , before python 3.0 , can also __cmp__ function in similar way, should return -1 if self has less value , 1 if self has greater value , 0 if self equal other .

the above functions - __eq__ or __ne__ called rich comparison operators , complete list can check out - rich comparison operators


Comments

Popular posts from this blog

facebook - android ACTION_SEND to share with specific application only -

python - Creating a new virtualenv gives a permissions error -

javascript - cocos2d-js draw circle not instantly -