2017-07-15 20 views
0

未解決の参照についてPyCharmからこの警告を受けました。 同様に構造化されたコードで、警告も受け取る必要があります。Docstringの未解決の参照警告 - Python 3.6 - Pycharm 17.1.4

class Parent: 
    """ 
    === Attributes === 
    @type public_attribute_1: str 
    """ 

    def __init__(self): 
     public_attribute_1 = '' 
    pass 

class Child(Parent): 
    """ 
    === Attributes === 
    @type public_attribute_1: str 
     > Unresolved reference 'public_attribute_1' 
    @type public_attribute_2: str 
    """ 

    def __init__(self): 
     Parent.__init__(self) 
     public_attribute_2 = '' 

    pass 

は私がpublic_attribute_1が明示的にChild.__init__()に開始されないことを理解しますが、public_attribute_1を開始Parent.__init__(self)Child.__init__()呼び出します。したがって、発生したエラーは、機能性以上の可読性と文書化に関係しています。

どのようにしてこのようなコードを読みやすくすることができますか?冗長性を挿入せずに継承点全体を破ることはできますか? docstringとコメントで完全に文書化し、PyCharmからの警告を無視するだけで十分でしょうか?それとも、それを行うためのピッソニックな方法がありますか?

+0

浮動 'pass'esとは何ですか?また、 'super().__ init __()'を使うべきです。 – jonrsharpe

+0

これらのクラスの残りのコードは重要ではないので、私は 'pass'を使いました。私は彼らが本当に必要ではないと思うけど、ええ。 – Amaranth

答えて

0

ここにはいくつかの問題があります。

  1. あなたがそれらを呼び出しているsuper()

  2. 使用Python 3では、 "属性" が、これはPythonで仕事を属性ではない方法です。詳細については、selfを使用してください。

あなたの質問はChilddocstringParent再定義されたすべての属性を持ちたいあなたに関してであるように思われます。メンテナンス性の観点から、これはかなり危険です。私がクラスがParentを継承しているのを見たら、Parentに慣れていなければParentの定義に行きます(で簡単にPyCharmとなります)。

これは本当にpythonicだと誰か他の人に言わせてもらえますが、それは私が働いていた方法です。それにかかわらず、継承を修正するには、コードは次のようになります。

class Parent: 
    """ 
    === Attributes === 
    @type public_attribute_1: str 
    """ 

    def __init__(self): 
     self.public_attribute_1 = '' 


class Child(Parent): 
    """ 
    === Attributes === 
    @type public_attribute_2: str 
    """ 

    def __init__(self): 
     super().__init__() 
     self.public_attribute_2 = '' 
     print(self.public_attribute_1) 
+0

入力いただきありがとうございます! 'Parent .__ init __(self)'と 'super .__ init __()'の違いを聞かせてもらえますか?私はコースを通じてPythonを学び、 'Parent .__ init __(self)'を使って継承を教えられ、コースはPython 3のためのものでした。 – Amaranth