[Tutor] Adding dynamic methods (was RE: Function assignment)

Zak Arntson zak@harlekin-maus.com
Thu Jun 12 16:00:02 2003


Okay, for everyone following along, here's my current draft. It works!

###
import new

class PyFictObject:
    def attach(self, func, name=None):
        setattr(self,
                name or func.__name__,
                new.instancemethod(func, self, PyFictObject))

    def msg(self, name, message):
        def f(self):
            return message
        self.attach(f, name)

    def get(self, name, *arg):
        func = getattr(self, name, False)
        if func:
            if callable(func):
                return func()
            return func
        return False

# setup our object
pipe = PyFictObject()
pipe.obj = ['pipe', 'bar']
pipe.adj = ['green', 'rusty']
pipe.msg('name', 'green pipe')
def desc(self):
    return "A rusty green pipe."
pipe.attach(desc)

# test our object
print pipe.get('obj')     # returns a list
print pipe.get('name')    # returns a string
print pipe.get('desc')    # returns a string

###

-- 
Zak Arntson
www.harlekin-maus.com - Games - Lots of 'em