Adding method to class at run-time: bad style?

Grant Edwards invalid at invalid
Tue Apr 7 16:37:35 CEST 2009


I realize that technically all methods are added to classes at
"run-time", but what I'm talking about is this:

   import ClientForm

   def controlEqual(self,other):
       return (self.type == other.type) and \
              (self.name == other.name) and \
              (self.value == other.value) and \
              (self.disabled == other.disabled) and\
              (self.readonly == self.readonly)
   
   def controlNotEqual(self,other):
       return not (self==other)
   
   ClientForm.Control.__eq__ = controlEqual
   ClientForm.Control.__ne__ = controlNotEqual
   
   def formEqual(self,other):
       if len(self.controls) != len(other.controls):
           return False
       for (c1,c2) in zip(self.controls,other.controls):
           if c1 != c2:
               return False
       return True
   
   def formNotEqual(self,other):
       return not (self==other)
   
   ClientForm.HTMLForm.__eq__ = formEqual
   ClientForm.HTMLForm.__ne__ = formNotEqual

It works fine, but it seems like it might be dangerous (or just
bad form) to insert methods into existing classes like that.
Perhaps it would be safer to make sure that __eq__, __ne__,
and __cmp__ don't exist before adding my own?

-- 
Grant Edwards                   grante             Yow! NEWARK has been
                                  at               REZONED!!  DES MOINES has
                               visi.com            been REZONED!!



More information about the Python-list mailing list