I'm currently learning OOP in Python and came across a book called "Mastering OOP by Steven F. Lott". In this book there is class which inherits from str and after excluding the inheritance the class seems to work the same way. Thus I was wondering what are the good use cases to inherit from str: from enum import Enum class Suit(str,Enum): Club = "♣" Diamond = "♦" Heart = "♥" Spade = "♠" cards = [AceCard('A', Suit.Spade), Card('2',Suit.Spade), FaceCard('J',Suit.Spade),] print([c.suit for c in cards]) [<Suit.Spade: '♠'>, <Suit.Spade: '♠'>, <Suit.Spade: '♠'>] I also learnt that if one wants to inherit from type str and modify after. One should implement the __new__ static method as in: class Suit(str): def __new__(cls,*args,**kwargs): return str.__new__(cls,*args,**kwargs) However again I'm not sure how one would make good use of this inheritance. Continue reading...