> This post inspired me to check the way new-style class instances work > with properties. Running the following code will demonstrate that > although the __setattr__ hack is blocked, you can still access the > instance's dict. This can obviously be fixed by using __slots__, but > that seems unwieldy. Should we do anything? > > class C(object): > def _getx(self): > print "getting x:", self._x > return self._x > def _setx(self, value): > print "setting x with:", value > self._x = value > x = property(_getx, _setx) > > a = C() > a.x = 1 > a.x > object.__setattr__(a, 'x', 'foo') > a.__dict__['x'] = 'spam' > print a.__dict__['x'] I see nothing wrong with that. It falls in the category "don't do that", but I don't see why we should try to make it impossible. The thing with attributes of built-in types was different. This can affect multiple interpreters, which is evil. It also is too attractive to expect people not to use it if it works (since many people *think* they have a need to modify built-in types). That's why I go to extra lengths to make it impossible, not just hard. --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