Adding method to class at run-time: bad style?
Grant Edwards
invalid at invalid
Tue Apr 7 14:48:58 EDT 2009
On 2009-04-07, Grant Edwards <invalid at invalid> wrote:
> On 2009-04-07, Scott David Daniels <Scott.Daniels at Acm.Org> wrote:
>> Grant Edwards wrote:
>>> I realize that technically all methods are added to classes at
>>> "run-time", but what I'm talking about is this:
> ...
>>
>>> ClientForm.Control.__eq__ = controlEqual
>>> ClientForm.Control.__ne__ = controlNotEqual
> ...
>
>> Well, a more standard approach would be:
>> class FancyControl(ClientForm.Control):
>> def __eq__(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 __ne__(self, other):
>> return not self.__eq__(other)
I like that, except it doesn't work. Objects instantiated from
sub-classes of ClientForm.Control break. I get errors like
this:
Traceback (most recent call last):
File "./testit.py", line 141, in <module>
f1 = getSocketForm(0)
File "./testit.py", line 99, in getSocketForm
return getForm("Socket",n)
File "./testit.py", line 88, in getForm
forms = ClientForm.ParseResponse(response,backwards_compat=False)
File "/usr/lib/python2.5/site-packages/ClientForm.py", line 1057, in ParseResponse
return _ParseFileEx(response, response.geturl(), *args, **kwds)[1:]
File "/usr/lib/python2.5/site-packages/ClientForm.py", line 1128, in _ParseFileEx
type, name, attrs, select_default=select_default, index=ii*10)
File "/usr/lib/python2.5/site-packages/ClientForm.py", line 2843, in new_control
control.add_to_form(self)
File "/usr/lib/python2.5/site-packages/ClientForm.py", line 2016, in add_to_form
Control.add_to_form(self, form)
TypeError: unbound method add_to_form() must be called with FancyControl instance as first argument (got CheckboxControl instance instead)
--
Grant Edwards grante Yow! I want a WESSON OIL
at lease!!
visi.com
More information about the Python-list
mailing list