1

すみません、私はPythonが初めてで、Pythonicアプローチを学ぼうとしています。基本的に、さまざまなソース (ファイル) から状態を初期化するクラスを設計しています。この動作を 1 つのインスタンス メソッドに分離しました_load_from_file(file)。では何度も呼び出されます__init__が、私は通常、コンストラクターをクラス定義の先頭に保持し、内部ヘルパー メソッドを末尾に保持することを好みます。

ただし、このアプローチを取る場合、使用したい_load_from_file時点で定義されていません。__init__pythonistas はこの状況をどのようにレイアウトしますか?

詳しく説明するには:

class Thing(object):
    def __init__(self, file_path):
        f = open('file_path')
        _load_from_file(self,"someData",f) # ISSUES!
        _load_from_file(self,"moreData",f) # WRONG!
        f.close()

    # Interface
    #     ...

    # Internal - Where do you guys put this stuff?
    def _load_from_file(self,thingToLoad,file):
        # logic
4

1 に答える 1

9

すでに使用している順序で機能しないと確信していますか? C を使用していないことを思い出してください。呼び出されるメソッドは、呼び出されるまでに定義されている限り、コードを呼び出す前にクラス定義に現れる必要はありません。

ただし、これを変更します。

_load_from_file(self)

これに:

self._load_from_file()

発生していた名前が定義されていないエラーは、メソッド呼び出しがメソッドの定義よりも前のファイル位置にあったためではなく、メソッドが定義されているオブジェクトを介してではなく、グローバル関数のように呼び出そうとしたためです。

于 2013-01-18T18:38:43.230 に答える