James Stroud wrote:
The thread "why not arrays" got me thinking. I would really like to inherit from a list so that I can add methods based on its contents, say if I filled it with a type of object and wanted to iterate over all objects. I have built a wrapper around a list like this for general use:
class list_of_objects: def __init__(self): self.data = [] def __len__(self): return len(self.data) etc ...
Then it can be heritable and I can add or override methods. Why aren't built in lists and dictionaries real heritable types that can save this kind of patchwork? Is there a pythonic reason I am missing here?
I think the thing you are really missing is the fact that list and the other built-in types can be used as the basis for inheritance:
Python 2.4 (#1, Dec 4 2004, 20:10:33) [GCC 3.3.3 (cygwin special)] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> class fooList(list): ... def bar(self): ... for item in self: ... print "Bar:", item ... >>> fl = fooList(('one', 'two', 'three')) >>> fl.append("four") >>> fl.bar() Bar: one Bar: two Bar: three Bar: four >>> type(fl) <class '__main__.fooList'> >>>
You do need to be somewhat careful, though, to understand the initialisation mechanism of the new object-based types if you are going to get the best out of them.
regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -- http://mail.python.org/mailman/listinfo/python-list