trouble subclassing str
sjmachin at lexicon.net
Fri Jun 24 02:29:37 CEST 2005
> I'd like to subclass the built-in str type. For example:
You'd like to build this weird-looking semi-mutable object as a
perceived solution to what problem? Perhaps an alternative is a class of
objects which have a "key" (your current string value) and some data
attributes? Maybe simply a dict ... adict["some text"] = 100?
> class MyString(str):
> def __init__(self, txt, data):
> self.data = data
> if __name__ == '__main__':
> s1 = MyString("some text", 100)
> but I get the error:
> Traceback (most recent call last):
> File "MyString.py", line 27, in ?
> s1 = MyString("some text", 12)
> TypeError: str() takes at most 1 argument (2 given)
> I am using Python 2.3 on OS X. Ideas?
__init__ is not what you want.
If you had done some basic debugging before posting (like putting a
print statement in your __init__), you would have found out that it is
not even being called.
1. Read the manual section on __new__
2. Read & run the following:
def __new__(cls, txt, data):
print "cls is", repr(cls)
theboss = super(MyString, cls)
print "theboss:", repr(theboss)
new_instance = theboss.__new__(cls, txt)
print "new_instance:", repr(new_instance)
new_instance.data = data
if __name__ == '__main__':
s1 = MyString("some text", 100)
print "s1:", type(s1), repr(s1)
print "s1.data:", s1.data
3. Note, *if* you provide an __init__ method, it will be called
[seemingly redundantly???] after __new__ has returned.
More information about the Python-list