> I notice that Python supports this sort of dual access for reading > attributes and calling static functions, but getting that behavior for > mutable attributes seems unreasonably difficult: I need a property in > the metaclass *and* in the class. I disagree that it is *unreasonably* difficult. Given that Python tries to do with a single notation ('.') where C++ has two notations ('.' and '::') to disambiguate cases, not to mention declarations, I think it is reasonable that this unusual case requires a little more effort; you should be glad that it's possible at all. :-) > 1. To throw out a straw-man suggestion, what about adding an > additional protocol __set2__ which, if found, will be called > instead of __set__ both for reading _and_ writing attributes on the > class? Let me throw out this straw-man right away: I'm not excited about this. You can write a metaclass that implements this generically though. > 2. What are the optional type=None arguments for? It seems as though > only the middle argument (obj) is ever None. I just copied this > protocol out of descrintro.html Only __get__ has both obj and type as arguments; __set__ has obj and value, __delete__ only obj. __get__ has obj and type because it can be used for instance and class attribute access. When called for a class, obj is None because it is unavailable; but when called for an instance, type is set to obj's class, for the convenience of descriptors that aren't interested in the instance (like staticmethod and classmethod). > 3. Is there documentation for __delete__ anywhere? Apparently not, but it's easy to guess what it does if you know __getattr__, __setattr__ and __delattr__. It's __delete__ and not __del__ because __del__ is already taken. In an early alpha release it was actually __del__, but that didn't work very well. :-) --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