I want to have a str with custom methods, but I have this problem: class myStr(str): def hello(self): return 'hello '+self s=myStr('world') print s.hello() # prints 'hello world' s=s.upper() print s.hello() # expected to print 'hello WORLD', but s is no longer myStr, it's a regular str! What can I do?