這是Python中的一個很好的練習(從Active State Recipes -- Public Decorator)?使用裝飾器向__all__添加名稱是一種好的做法嗎?
import sys
def public(f):
"""Use a decorator to avoid retyping function/class names.
* Based on an idea by Duncan Booth:
http://groups.google.com/group/comp.lang.python/msg/11cbb03e09611b8a
* Improved via a suggestion by Dave Angel:
http://groups.google.com/group/comp.lang.python/msg/3d400fb22d8a42e1
"""
all = sys.modules[f.__module__].__dict__.setdefault('__all__', [])
if f.__name__ not in all: # Prevent duplicates if run from an IDE.
all.append(f.__name__)
return f
public(public) # Emulate decorating ourself
總的想法是定義一個裝飾,需要一個功能或 類,並增加了它的名字到當前模塊的__all__
。
修正了標題,正如有些人指出的那樣 – 2011-06-01 18:57:42
雖然這看起來不錯,但我發現它混淆了我的IDE(PyCharm 2016.1.4),它大部分都會破壞目的。如果有足夠的IDE支持,我會使用它。 – 2016-07-13 20:22:25
獲得這個裝飾器100%防彈似乎更難:看到[Python bug#26632](https://bugs.python.org/issue26632)和['atpublic'模塊](https:// pypi。 python.org/pypi/atpublic)在那裏提到。 – kostix 2016-12-10 09:25:29