Re: string methods of a str subclass
On Apr 16, 3:28 am, Daniel Nogradi [EMAIL PROTECTED] wrote: I am probably misunderstanding some basic issue here but this behaviour is not what I would expect: Python 2.4 (#1, Mar 22 2005, 21:42:42) [GCC 3.3.5 20050117 (prerelease) (SUSE Linux)] on linux2 Type help, copyright, credits or license for more information. class mystr( str ): ... pass ... x = mystr( 'x' ) isinstance( x, mystr ) True isinstance( x.strip( ), mystr ) False Why is the strip( ) method returning something that is not a mystr instance? I would expect all methods operating on a string instance and returning another string instance to correctly operate on a mystr instance and return a mystr instance. How would I achieve something like this without manually copying all string returning methods from str and stuffing the result to mystr( ) before returning? class A(object): def __init__(self, s): self.s = s def strip(self): return 2 class mystr(A): pass x = mystr(x) print isinstance(x, mystr) print isinstance(x.strip(), mystr) -- http://mail.python.org/mailman/listinfo/python-list
Re: string methods of a str subclass
Daniel Nogradi [EMAIL PROTECTED] wrote: Why is the strip( ) method returning something that is not a mystr instance? I would expect all methods operating on a string instance and returning another string instance to correctly operate on a mystr instance and return a mystr instance. Why would you expect that? Would you expect the __str__ and__repr__ methods also to return a mystr instance? If not those, then which other ones might also be excluded? Is x.encode('zip') still a mystr instance or an encoded byte-string? How would I achieve something like this without manually copying all string returning methods from str and stuffing the result to mystr( ) before returning? You don't without wrapping all the affected methods. It doesn't need to involve manual copying though: you have a programming language available so just write a list of method names and then some code to wrap them automatically. -- http://mail.python.org/mailman/listinfo/python-list
Re: string methods of a str subclass
On Apr 16, 3:28 am, Daniel Nogradi [EMAIL PROTECTED] wrote: I would expect all methods operating on a string instance and returning another string instance Ok, then this: class A(object): def __init__(self, s): self.s = s def strip(self): return self.s class mystr(A): pass x = mystr(x) print isinstance(x, mystr) print isinstance(x.strip(), mystr) x is a string, and that is what gets passed to the base class's __init__ method, and that is what strip() operates on. -- http://mail.python.org/mailman/listinfo/python-list
Re: string methods of a str subclass
Why is the strip( ) method returning something that is not a mystr instance? I would expect all methods operating on a string instance and returning another string instance to correctly operate on a mystr instance and return a mystr instance. Why would you expect that? Would you expect the __str__ and__repr__ methods also to return a mystr instance? If not those, then which other ones might also be excluded? Is x.encode('zip') still a mystr instance or an encoded byte-string? Okay, good point, thanks. How would I achieve something like this without manually copying all string returning methods from str and stuffing the result to mystr( ) before returning? You don't without wrapping all the affected methods. It doesn't need to involve manual copying though: you have a programming language available so just write a list of method names and then some code to wrap them automatically. Yes, this is in fact what I am doing, using __getattr__ and such. Thanks again. -- http://mail.python.org/mailman/listinfo/python-list