Someone accidentally discovered a way to set attributes of built-in types, even though the implementation tries to prevent this. For example, you cannot modify the str type to add a new method. Let's define the method first: >>> def reverse(self): ... return self[::-1] ... >>> Using direct attribute assignment doesn't work: >>> str.reverse = reverse Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: can't set attributes of built-in/extension type 'str' >>> Using the dictionary doesn't work either: >>> str.__dict__['reverse'] = reverse Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object does not support item assignment >>> But here's a trick that *does* work: >>> object.__setattr__(str, 'reverse', reverse) >>> Proof that it worked: >>> "hello".reverse() 'olleh' >>> What to do about this? I *really* don't want changes to built-in types to become a standard "hack", because there are all sorts of things that could go wrong. (For one, built-in type objects are static C variables, which are shared between multiple interpreter contexts in the same process.) --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4