へのインポート、私はクラスのpython:クラスの名前空間
class TranformerTestInit(unittest.TestCase):
def __init__(self):
pass
私はそれがそのクラスにのみ表示されていること
from regional_pos_tranformer import regional_pos
のでステートメントを追加する必要があり
全体ではなく、モジュールを使用している場合は?
へのインポート、私はクラスのpython:クラスの名前空間
class TranformerTestInit(unittest.TestCase):
def __init__(self):
pass
私はそれがそのクラスにのみ表示されていること
from regional_pos_tranformer import regional_pos
のでステートメントを追加する必要があり
全体ではなく、モジュールを使用している場合は?
クラススコープに入れてください。たとえば、行の真上で、同じインデントで入力してください。 self.regional_pos
またはcls.regional_pos
(cls
がTranformerTestInit
にバインドされていることを前提とします)となります。
モジュールのdir()
には表示されませんが、それでも直接アクセス:TranformerTestInit.regional_pos
でアクセスできます。
インポートするものは、インスタンスで呼び出されたときに最初のパラメータとしてself
を渡すことで、クラス内で実際に定義されている他の関数、クラス、またはデータ構造と同様に扱われることに注意してください。 staticmethod
で関数をラップすることはできますが、クラスを作成する際に関数を呼び出すことは機能しません。 あなたがそれを行うことができる間に、それはおそらく努力の価値がありません。
単にクラスで最後のものというあなたを作るクラスの作成時にstaticmethod
頭痛を避けるために:ちょうどアンダースコアでモジュールレベルと接頭辞でインポートする
class SomeThing:
from stdlib import widget
...
fancy = widget(...)
...
widget = staticmethod(widget)
簡単:
from stdlib import widget as _widget
'regional_pos'がディスクリプタである場合、' self.regional_pos'または 'TransformerTestInit.regional_pos'へのアクセスはディスクリプタプロトコルを有効にするので、見た目よりもエラーが発生しやすくなります。これは特にPython 2で問題を引き起こす可能性が高いですが、Python 3でも、 'self.regional_pos'は' regional_pos'関数ではなくバインドされたメソッドオブジェクトになるでしょう。 – user2357112
@ user2357112:良い点、更新された回答。 –
なぜこのようにする必要があるのですか? – stybl
また、できません。あなたは実行を遅らせることができますが、最終的に 'import'はファイルを' exec'するための素晴らしい方法です。 –
"モジュール全体ではなく、そのクラスだけが見ることができるように" - そのようなスコープはPythonには存在しません。クラス定義を関数の中にネストすることで、このようなスコープでクラッシュすることができますが、実際にはそうすべきではありません。モジュール全体に見えるようにするだけです。 – user2357112