module inheritance? How to add a member to a class in a module
Ype Kingma
ykingma at accessforall.nl
Thu May 10 15:11:44 EDT 2001
George Young wrote:
>
...
>
> Here's a sketch of the code; I'm trying to add the getnotify() member to
> pgdbCnx:
>
> ----------------pgdb.py: the third party module I'd rather not modify
> per se-----------
> class pgdbCnx
> def __init__(self, cnx):
> self.__cnx = cnx
> self.__cache = pgdbTypeCache(cnx)
> src = self.__cnx.source()
> src.execute("BEGIN")
> def commit(self):
> src.execute("COMMIT")
> #a few other classes and some constants and module-level functions...
>
> ---------------pgdb_enhanced.py---------
> from pgdb import * #just get everything
>
> class __tmp(pgdbCnx): #now I have pgdbCnx from the import, I
> make new class from it
> def __init__(self):
> pgdbCnx.__init__(self)
> def getnotify(self): # add my member func to this tmp class
> return self._pgdbCnx__cnx.getnotify()
>
> class pgdbCnx(__tmp): # shadow the imported class with this
> new enhanced class
> def __init__(self):
> tmp.__init__(self)
>
> Unfortunately, this doesn't work. In my application I get:
> Traceback (most recent call last):
> File "./er.py", line 433, in notified
> notify = db_conn.getnotify()
> AttributeError: pgdbCnx instance has no attribute 'getnotify'
>
> What is the proper pythonic way to do such a thing?
You might add the method to all instances of pbdbCnx that need it.
I don't now how proper this is.
You can do it before the first method invocation:
def yourgetnotify(self):
return self.whateveryouneed
someCnx = pbdbCnx()
someCnx.getnotify = yourgetnotify # no braces
ntf = someCnx.getnotify()
Python is not statically typed.
Good luck,
Ype Kingma
email at xs4all.nl
More information about the Python-list
mailing list