python - pylint source
__init__の外側に定義されたインスタンス属性attribute_name (2)
parse_arguments()
からタプルを返し、必要に応じて__init__
内の属性に展開してください。
また、 exit(1)
代わりにExceptionsを使用することをお勧めします。 あなたはトレースバックを取得し、コードは再利用可能です。
class Wizard:
def __init__(self, argv):
self.name,self.magic_ability = self.parse_arguments(argv)
def parse_arguments(self, argv):
assert len(argv) == 2
return argv[0],argv[1]
クラスコンストラクタを分割するには、次のように複数の関数を呼び出します。
class Wizard:
def __init__(self, argv):
self.parse_arguments(argv)
self.wave_wand() # declaration omitted
def parse_arguments(self, argv):
if self.has_correct_argument_count(argv):
self.name = argv[0]
self.magic_ability = argv[1]
else:
raise InvalidArgumentsException() # declaration omitted
# ... irrelevant functions omitted
私の通訳が喜んで自分のコードを実行している間、Pylintは苦情を申し立てています:
Instance attribute attribute_name defined outside __init__
大まかなGoogleの検索は現在無駄です。 すべてのコンストラクタロジックを__init__
保存しておくと、組織化されていないように見え、Pylintの警告も消えるように見えます。
この問題を解決するPythonの方法とは何ですか?
このメッセージの背後にある考え方は、読みやすさのためです。 __init__
メソッドを読むことで、インスタンスが持つ可能性があるすべての属性を見つけることができます。
あなたはまだ初期化を他のメソッドに分割したいかもしれません。 このような場合、 __init__
に属性をNone
(ドキュメントのあるものを含む)に代入するだけでサブ初期化メソッドを呼び出すことができます。