> Cool. And now that I have my pedantic hat on, I may as well go all > out. First, why call it func_attrs, when staticmethod and > classmethod are underscoreless? Just for variety. :-) We had a discussion about naming conventions recently, and I believe the outcome was that most folks like underscores in their names. OTOH if I was writing this just for *me*, I would indeed make them underscoreless. > Second, I know it is effectively the same, but shouldn't the .update > line use vars(funcobj) instead of funcobj.__dict__? This is > something that I am asked (often!) by my Python students. I use > vars(obj) since it looks less magical. No, vars() might return a copy. __dict__ is the real thing (unless it isn't -- try updating the __dict__ of a new-style class :-). But perhaps the real implementation should use setattr() anyway -- some function attributes are not stored in the __dict__ (like __doc__) and these should still be settable this way (if they are settable at all). And if they are *not* settable, this should raise an error rather than silently creating an inaccessible entry in __dict__. So let's rephrase that class as: class funcattrs(object): def __init__(self, **kwds): self.attrs = kwds def __call__(self, func): for name, value in self.attrs.iteritems(): setattr(func, name, value) return func --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