python:导入类命名空间

时间:2017-03-09 18:47:57

标签: python python-3.x python-import

如果我有课

class TranformerTestInit(unittest.TestCase):
    def __init__(self):
        pass

我应该在哪里添加声明

from regional_pos_tranformer import regional_pos

这样它只对该类可见而不是整个模块?

1 个答案:

答案 0 :(得分:0)

将它放在类范围内,例如直接位于def __init__行的上方和同一缩进处。然后它将以self.regional_poscls.regional_pos的形式提供(假设您cls绑定到TranformerTestInit)。

虽然它不会显示在模块的dir()中,但仍可通过直接访问进行访问:TranformerTestInit.regional_pos

重要的是要记住,导入的任何内容都将被视为与类中实际定义的任何其他函数,类或数据结构一样 - 在通过实例调用时将self作为第一个参数传递完成。你可以在staticmethod中包装函数,但当然在构建类时调用它们是行不通的。 1 所以虽然你可以做到,但它可能不值得努力。

1 为了避免在课堂创作过程中出现staticmethod头痛,请简单地将其作为课堂上的最后一件事:

class SomeThing:
    from stdlib import widget
    ...
    fancy = widget(...)
    ...
    widget = staticmethod(widget)

更容易在模块级别导入并使用下划线前缀:

from stdlib import widget as _widget