这是Python中的一个好习惯吗(来自Active State Recipes -- Public Decorator)?

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__中。

最佳答案

是的,这是一个好习惯。该装饰器使您可以直接在函数或类定义中声明意图,而不是在此之后直接声明。这使您的代码更具可读性。

@public
def foo():
    pass

@public
class bar():
    pass

class helper(): # not part of the modules public interface!
    pass

注意:helper仍然可供模块用户使用 modulename.helper。只是不使用from modulename import *导入。

关于python - 使用装饰器向__all__添加名称是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6206089/

10-12 21:50