Adding method to a class on the fly

askel dummy666 at mail.ru
Fri Jun 22 17:28:44 EDT 2007


On Jun 22, 5:17 pm, 7stud <bbxx789_0... at yahoo.com> wrote:
> On Jun 22, 2:24 pm, askel <dummy... at mail.ru> wrote:
>
> > class Dummy:
> >   def method(self, arg):
> >     print arg
>
> > def method2(self, arg):
> >   self.method(arg)
>
> > Dummy.method2 = method2
> > Dummy.method2('Hello, world!')
>
> Traceback (most recent call last):
>   File "test1.py", line 8, in ?
>     Dummy.method2('Hello, world!')
> TypeError: unbound method method2() must be called with Dummy instance
> as first argument (got str instance
> instead)
>
>
>
> >I like that to be the same as:
>
> >class Dummy:
> >    def __init__(self):
> >        return
>
> >    def method_dynamic(self):
> >        return self.method_static("it's me")
>
> >    def method_static(self, text):
> >        print text
> >       return
>
> >so that I can do:
>
> >dum=Dummy.method_dynamic()
>
> >and see "it's me" printed.
>
> When are you able to see that?

there is no way to call instance method from static one. but in your
case you can make something like:

class Dummy:
  @staticmethod
  def method(arg):
    print arg

def method2(arg):
  Dummy.method(arg)

Dummy.method2 = staticmethod(method2)
Dummy.method2('Hello, world!')

- OR -

def method2(cls, arg):
  cls.method(arg)

Dummy.method2 = classmethod(method2)
Dummy.method2('Hello, world!')




More information about the Python-list mailing list