web-dev-qa-db-ja.com

ライブラリをオブジェクトの属性として保存することは、ソフトウェアエンジニアリングの慣行として適切ですか?

python object-

#filename: file_A
import file_
class A():
    def __init__(self):
        self.pd = file_.pd
        self.np = file_.np

そして、file_の内容が、

#filename: file_
import pandas as pd
import numpy as np

import file_pdnpのネームスペースを含むので、これらのライブラリをオブジェクトとして使用できるようにするためです。以下のように、子クラス。

#filename: file_B
from file_A import A
Class B(A):
    # Getting all the libraries without even importing them again. 

私の懸念は、この戦略の影響についてです。そのような方法を採用する方が良いでしょうか?

2
Mr. Sigma.

モジュールはPythonのオブジェクトであり、オブジェクトを変数に割り当てることができます。それについて本質的に良いことも悪いこともありません。それがあなたの問題を解決するなら、それはおそらく問題ありません、それがあなたが心配している問題を引き起こすなら、それはおそらく悪いです。

私が別の方法で行った唯一のことは、インポートをクラスの中に移動することです:

_class A(object):
    from file_ import *
_

または

_class A(object):
    import pandas as pd
    import numpy as np
_

これはより簡単で、それらをクラス名前空間にインポートするつもりであることを明確にします。 ___init___で変数を割り当てると、子クラスが___init___をオーバーライドする場合、子クラスがsuper().__init__()を呼び出すことを忘れないようにする必要があるという欠点があります。

4
Lie Ryan