I was wondering if there would be any interest for adding a special case for properties with string-valued fget/fset/fdel: - if fget is a string, then the getter returns the value of the member variable with the given name. - if fset is a string, then the setter sets the value of the member variable with the given name. - if fdel is a string, then the deleter deletes the member variable with the given name. I.e., the following groups would be functionally equivalant: property(fget='_foo') property(fget=lambda self: self._foo) property(fget=lambda self: getattr(self, '_foo')) property(fset='_foo') property(fset=lambda self, value: setattr(self, '_foo', value)) property(fdel='_foo') property(fdel=lambda self: delattr(self, '_foo')) This change has 2 advantages: 1. It's easier to read. (In my opinion, anyway; what do other people think?) 2. It's faster: for properties whose fget/fset/fdel are strings, we can avoid a function call (since the changes are implemented in c). Preliminary tests indicate that this results in approximately a 3x speedup for a tight loop of attribute lookups. (It's unclear how much of a speed increase you'd get in actual code, though.) and one disadvantage (that I can think of): - It's one more special case to document/know. This change shouldn't break any existing code, because there's currently no reason to use string-valued fget/fset/fdel. Does this change seem useful to other people? Do the advantages outweigh the disadvantage? Or are there other disadvantage that I neglected to notice? If this seems like a useful addition, I'd be happy to work on making a patch that includes test cases & doc changes. -Edward
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