繁体   English   中英

python:导入到类名称空间

[英]python: import into class namespace

如果我有课

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

我应该在哪里添加声明

from regional_pos_tranformer import regional_pos

这样,它仅对该类可见,而对整个模块不可见?

将其放在类范围内,例如,直接在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM