如果我有课
class TranformerTestInit(unittest.TestCase):
def __init__(self):
pass
我应该在哪里添加声明
from regional_pos_tranformer import regional_pos
这样它只对该类可见而不是整个模块?
答案 0 :(得分:0)
将它放在类范围内,例如直接位于def __init__
行的上方和同一缩进处。然后它将以self.regional_pos
或cls.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