getattrupper upper(getattrupper 'spamx[ getitem 'px __getitem__( getitem 'ptype(x__getitem__( getitem 'px 'eggsaddeggs 'spameggsx __add__('eggs'addeggs 'spameggstype(x__add__( 'eggs'addeggs 'spameggsbuilt-in operation (implicittraditional equivalence (explicitnew-style equivalence ditto for and others for more details we will revisit this change in on metaclassesand by example in the contexts of attribute management in and privacy decorators in in the latter of thesewe'll also explore coding structures for providing proxies with the required operator methods generically--it' not an impossible taskand may need to be coded just once if done well for more of the sort of code influenced by this issuesee those later as well as the earlier examples in and because we'll expand on this issue later in the bookwe'll cut the coverage short here for external links and pointers on this issuethoughsee the following (along with your local search engine)python issue this issue has been discussed widelybut its most official history seems to be documented at was raised as concern for real programs and escalated to be addressedbut proposed library remedy or broader change in python was struck down in favor of simple documentation change to describe the new mandated behavior tool recipesalso see python recipe that describes tool that automatically fills in special method names as generic call dispatchers in proxy class created with metaclass techniques introduced later in this this tool still must ask you to pass in the operator new-style class changes