2016-10-17 24 views
1

私はPythonでOOPを学んでいます。Pythonでの継承の理解

これは私が意図したとおりに動作しない理由は苦労していますか?

class Patent(object): 
    """An object to hold patent information in Specific format""" 
    def __init__(self, CC, PN, KC=""): 
     self.cc = CC 
     self.pn = PN 
     self.kc = KC 

class USPatent(Patent): 
    """"Class for holding information of uspto patents in Specific format""" 
    def __init__(self, CC, PN, KC=""): 
     Patent.__init__(self, CC, PN, KC="") 


pt1 = Patent("US", "20160243185", "A1") 

pt2 = USPatent("US", "20160243185", "A1") 

pt1.kc 
Out[168]: 'A1' 

pt2.kc 
Out[169]: '' 

USPatentインスタンスでkcを取得できないように私が明らかにしている間違いは何ですか?ここで

答えて

4

あなたは空の文字列を渡しています

Patent.__init__(self, CC, PN, KC="") 

これは、Patent.__init__()メソッドの設定をKC""と呼びます。 KCのどのような値で

パスがあなたの代わりに受け取っ:

class USPatent(Patent): 
    """"Class for holding information of uspto patents in Specific format""" 
    def __init__(self, CC, PN, KC=""): 
     Patent.__init__(self, CC, PN, KC=KC) 

USPatent.__init__()の中で、KCはちょうどselfCCPNのように、ちょうど別の変数です。すでに""に設定されているか、または引数付きでUSPatent(...)を呼び出したときに渡されたものに設定されています。あなたは単にあなたが持っているすべての値を渡すPatent.__init__()メソッドを呼び出すしたいと思います。

あなたも呼び出しからキーワード引数の構文をドロップすることができます。

Patent.__init__(self, CC, PN, KC) 
+0

私はまだKC = KCの使用を理解していないのですか? – Rahul

+0

@Rahul:あなたの関数に 'print(CC、PN、KC)'を追加すれば助けになるでしょうか?あなたは値に何が起こるか見るでしょう。 –

+1

@Rahul 'KC =" "は、[デフォルトのキーワード引数で関数を定義する](https://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions )([キーワード引数を持つ関数を呼び出す](https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments)とは対照的です)。 – tutuDajuju

1
class USPatent(Patent): 
    """"Class for holding information of uspto patents in Specific format""" 
    def __init__(self, CC, PN, KC=""): 
     Patent.__init__(self, CC, PN, KC="") 

あなたは、入力されたKCを渡すには代わりにKC=KC

の、KC=""を符号化することにより""としてKCを渡す:

class USPatent(Patent): 
    """"Class for holding information of uspto patents in Specific format""" 
    def __init__(self, CC, PN, KC=""): 
     Patent.__init__(self, CC, PN, KC) 
+0

ありがとうございました。私はそれを得た – Rahul

1

ライン

Patent.__init__(self, CC, PN, KC="") 

Patent.__init__(self, CC, PN, KC) 

旧セットの名前と引数であるべき」キーワードスタイルの引数構文を使用して値「""(空文字列)」に変換します。あなたが望むのは、代わりに変数KCの値を渡すことです。

+0

ありがとうございます。わかった – Rahul