編集
__init__ の外側で定義されたインスタンス属性 attribute_nameが重複している可能性があることに注意してください。これにはほとんど同意します(pylintを検索することを知らなかったので、これに遭遇しませんでした)。ただし、同じ方法を使用してクラスを再初期化できるようにしたいので、この質問を開いたままにしておきます。前の質問の一般的なコンセンサスは、スクリプトから各パラメーターを返しloadData
、それを解析して self オブジェクトにすることでした。これは問題ありませんが、クラスのインスタンスを再初期化できるようにするには、別のメソッド内でもう一度行う必要があります。おそらく問題は私の例です。実際には、システムによって読み込まれる約 30 のパラメータがあります。loadData
そのため、2 つの異なる場所でそれらを解析する必要があることをためらっています。
ここでの一般的なコンセンサスが、パラメーターを返す方法であるということである場合は、先に進んでこの質問を重複として閉じることができます。ただし、それまでの間、他の誰かがアイデア/理由についての良い説明を持っているかどうかを確認するのを待ちたいと思います.
オリジナル
これは、「ベスト プラクティス」の質問のようなものです。私は最近 Python を学んでいます (部分的には何か新しいことを学び、部分的には MATLAB から離れるためです)。Python で作業しているときに、次のような構造のクラスを作成しました。
class exampleClass:
"""
This is an example class to demonstrate my question to stack exchange
"""
def __init__( self, fileName ):
exampleClass.loadData( self, fileName )
def loadData( self, fileName ):
"""
This function reads the data specified in the fileName into the
current instance of exampleClass.
:param fileName: The file that the data is to be loaded from
"""
with open(fileName,'r') as sumFile:
self.name = sumFile.readLine().strip(' \n\r\t')
今、これは私にとって理にかなっています。人口関数を呼び出して、クラスの現在のインスタンスを設定する init クラスがあります。また、何らかの理由で必要な場合に、このクラスの特定のインスタンスを再初期化できるようにする人口関数もあります(たとえば、クラスが大量のメモリを占有し、クラスの個別のインスタンスを作成する代わりに、上書きするインスタンスが 1 つあります。
ただし、このコードを IDE (pycharm) に入れると、インスタンス属性が の外部で定義されているという警告がスローされます__init__
。明らかに、これはコードの操作には影響しません。すべて正常に動作しますが、この場合、警告に注意を払う理由があるかどうか疑問に思っています。を呼び出す前に init メソッドですべてのプロパティをデフォルト値に初期化することもできますが、loadData method
これは私には不必要な作業のように思え、実行が遅くなるようです (ごくわずかですが)。また、メソッド内に 1 つ、実際のメソッドとして 1つ、本質的に 2 つの loadData メソッドのコピーを作成することもできますが、__init__
これも不要な余分な作業のように思えます。
全体として、私の質問は、この状況でのベストプラクティスは何であるかということです。前の段落で述べた方法のいずれかでコードを再構築する必要がある理由はありますか、それともコード検査の警告が広すぎる IDE のインスタンスに過ぎないのでしょうか。この警告が考慮すべきいくつかの例を明らかに見ることができますが、私の現在の経験では、この場合は問題のようには見えません。