クラス変数が定義されているかどうかを確認します

user3391754

私はPythonクラスFooを持っているシナリオを扱っています。Fooは、とりわけ、多くの大きな計算を行いますが、必要な場合を除いて、私はそれを行いません。したがって、これらの大きな計算の1つに対してgetterメソッドを定義する場合、計算に対応するメソッド(ここではbigcalculation())がすでに実行されていることを確認するにはどうすればよいですか?

class Foo:
    def __init__(self):
        #initialize some stuff
    def bigcalculation(self):
         #perform calculation
         self.big_calc_result=[big list of numbers];

    def get_big_calc_result(self):
        if hasattr(self,'big_calc_result')==False:
            self.bigcalculations();
        return sef.big_calc_result;

一度実行した場合、再度実行したくありません。発信者が一度実行したかどうかを追跡する必要はありません。

今、私は上記のようにhasattr()関数を使用してそれを行いますが、これは本当に醜い方法だと思います。それを行うためのよりエレガントなpythonicの方法はありますか?

私が考えることができる別の方法は、init()関数で、クラスで使用するすべての変数を空のリストとして定義することです。次に、big_calc_resultが空のリストであるかどうかを確認して、self.bigcalculation()がすでに実行されているかどうかを判別します。これはより良いアプローチですか?

関連する質問:Pythonを使用すると、クラス内でその場で変数を定義できます。しかし、それは悪いプログラミング慣行ですか?

編集:振り返ってみると、例外を使用することもこの状況を処理する別の方法である可能性があることもわかりました。それは物事を行うためのよりパイソン的な方法かもしれません。

def get_big_calc_result(self):
    try:
        return self.big_calc_result;
    except AttributeError:
        self.bigcalculations();
        return self.big_calc_result;

この質問への回答は役に立ちます:Pythonでのメンバーの存在の確認

mgilson

結果をメモして、プロパティとして保存できます。

class Foo(object):
    def __init__(self):
        self._big_calc_result = None

    @property
    def big_calc_result(self):
        if self._big_calc_result is not None:
            return self._big_calc_result
        else:
            self._big_calc_result = self.big_calc_run()
            return self._big_calc_result 

    def big_calc_run(self):
        time.sleep(10)  # Takes a long time ...

これで、クラスを初期化して結果を取得するだけです。

f = Foo()
x = f.big_calc_result
y = f.bic_calc_result  # Look mom, this happened really quick

もちろん、直感的でない場合はプロパティを使用する必要はありません。提供しようとしているAPIに合わせて、このあたりで変更を加えることができます。本当の意味は、アンダースコアが前に付いた変数に結果をキャッシュすることです。つまり、「これは実装の詳細です。これを台無しにした場合、将来のある時点でコードを中断する価値があります」。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

変数が定義されているかどうかを確認していますか?

分類Dev

ostream << TがクラスTに定義されているかどうかを確認します

分類Dev

Windowsバッチスクリプトで環境変数が定義されているかどうかをどのように確認しますか

分類Dev

Typescriptで変数が定義されているかどうかを確認しますか?

分類Dev

変数がJavaですでに定義されているかどうかを確認します

分類Dev

Thymeleaf:変数が定義されているかどうかを確認します

分類Dev

PostBuildEventで変数が定義されているかどうかを確認します

分類Dev

変数が設定されているかどうかを確認します

分類Dev

チェックボックスが定義されているかどうかを確認します

分類Dev

変数がJavaで定義されているかどうかを確認する方法はありますか?

分類Dev

Javascript-変数が設定されているかどうかを確認すると、未定義のエラーが発生します

分類Dev

Pythonで回避するように変数が定義されているかどうかを確認していますか?

分類Dev

クラスがジェネリック型として定義されているかどうかを確認します

分類Dev

クラス内のプロパティが設定されているかどうかを確認します

分類Dev

クラスプロパティが設定されているかどうかを確認します

分類Dev

関数がSMLで定義されているかどうかを確認します

分類Dev

関数が「async」で定義されているかどうかを確認します

分類Dev

クラスにPHPUnitで定義された定数があるかどうかを確認する正しい方法

分類Dev

Juliaのモジュール内で変数が定義されているかどうかをどのように確認しますか?

分類Dev

Django:設定変数が設定されているかどうかを確認します

分類Dev

警告なしに複数のansible変数が定義されているかどうかを確認するにはどうすればよいですか?

分類Dev

セクションがビューで定義されているかどうかを確認します

分類Dev

オブジェクトの属性が定義されているかどうかを確認します

分類Dev

2つの変数が設定されているかどうかを確認しますか?

分類Dev

$ _SESSION変数がJavascriptから設定されているかどうかを確認します

分類Dev

クラスに関数が定義されているかどうかを確認する最も速い方法は何ですか?

分類Dev

オブジェクトに文字列変数を使用して定義された関数があるかどうかを確認します

分類Dev

オブジェクト(変数)がRで定義されているかどうかを確認するにはどうすればよいですか?

分類Dev

環境変数が存在し、Trueに設定されているかどうかを確認します

Related 関連記事

  1. 1

    変数が定義されているかどうかを確認していますか?

  2. 2

    ostream << TがクラスTに定義されているかどうかを確認します

  3. 3

    Windowsバッチスクリプトで環境変数が定義されているかどうかをどのように確認しますか

  4. 4

    Typescriptで変数が定義されているかどうかを確認しますか?

  5. 5

    変数がJavaですでに定義されているかどうかを確認します

  6. 6

    Thymeleaf:変数が定義されているかどうかを確認します

  7. 7

    PostBuildEventで変数が定義されているかどうかを確認します

  8. 8

    変数が設定されているかどうかを確認します

  9. 9

    チェックボックスが定義されているかどうかを確認します

  10. 10

    変数がJavaで定義されているかどうかを確認する方法はありますか?

  11. 11

    Javascript-変数が設定されているかどうかを確認すると、未定義のエラーが発生します

  12. 12

    Pythonで回避するように変数が定義されているかどうかを確認していますか?

  13. 13

    クラスがジェネリック型として定義されているかどうかを確認します

  14. 14

    クラス内のプロパティが設定されているかどうかを確認します

  15. 15

    クラスプロパティが設定されているかどうかを確認します

  16. 16

    関数がSMLで定義されているかどうかを確認します

  17. 17

    関数が「async」で定義されているかどうかを確認します

  18. 18

    クラスにPHPUnitで定義された定数があるかどうかを確認する正しい方法

  19. 19

    Juliaのモジュール内で変数が定義されているかどうかをどのように確認しますか?

  20. 20

    Django:設定変数が設定されているかどうかを確認します

  21. 21

    警告なしに複数のansible変数が定義されているかどうかを確認するにはどうすればよいですか?

  22. 22

    セクションがビューで定義されているかどうかを確認します

  23. 23

    オブジェクトの属性が定義されているかどうかを確認します

  24. 24

    2つの変数が設定されているかどうかを確認しますか?

  25. 25

    $ _SESSION変数がJavascriptから設定されているかどうかを確認します

  26. 26

    クラスに関数が定義されているかどうかを確認する最も速い方法は何ですか?

  27. 27

    オブジェクトに文字列変数を使用して定義された関数があるかどうかを確認します

  28. 28

    オブジェクト(変数)がRで定義されているかどうかを確認するにはどうすればよいですか?

  29. 29

    環境変数が存在し、Trueに設定されているかどうかを確認します

ホットタグ

アーカイブ