2016-05-25 7 views
-1

私はSlatkinのEffective Pythonを読んでいます。項目24では、コンストラクタの役割を果たす関数classmethodを使用して、Pythonで多態性を達成する方法について説明します。Pythonでclassmethodコンストラクタを使用するのはなぜですか?

しかし、なぜこれが必要なのかはわかりません。 __init__をそのまま使用して、派生クラスごとに同じ目標を達成できないのはなぜですか。classmethodをオーバーライドするのと同じ方法ですか?

彼は、クラスごとに1つのコンストラクタしか持っていないので、classmethodではなくその目的のためにregular initを使用してみませんか?

あなたは、残念ながら詳細が欠けている、ここでは項目24何を見ることができます:ここ http://ptgmedia.pearsoncmg.com/images/9780134034287/samplepages/9780134034287.pdf

詳細:本で示された例では http://qiita.com/giwa/items/fd563a93825714cffd70

+0

Googleブックスでこれを読もうとしています:https://books.google.com/books?id=ocmqBgAAQBAJ&pg=PA64&lpg=PA64&[email protected]+Polymorphism+to+Construct+Objects+Generically+slatkin&source= BL&OTS = ZCiluYizaC&SIG = QfGv_bVYM2dYdNyXvHH-jrWM9C8&HL = EN&SA = X&VED = 0ahUKEwiR8dy7h_TMAhVD6CYKHXMYDH0Q6AEILjAD#V = 1ページ分&Q =%20%を使用し40classmethod%20Polymorphism%20to%20Construct%20Objects%20Generically%20slatkin&Fそれでも= falseを –

+3

、あなたは* *によって行われた議論をまとめることができればスラットキン**ここ**、私たちはこの質問を開いたままにすることができ、私はそれに答えることができます。これらの詳細がなければ、問題はそれ自体で立っておらず、閉じられるだけです。 –

+0

そして今私はあなたが見逃したことを見た。クラスメソッドは** one **インスタンスを生成せず、シーケンスを生成します。 –

答えて

3

を、クラスメソッドは、単一のを生成しません。要素。すべての異なるクラスは同じクラスメソッド(同じシグネチャ)をサポートしますが、インスタンスを生成するために何を行うか、生成するインスタンスの数がクラスに委譲されます。

たとえば、クラスは、を使用してすべての入力ファイルを読み込み、config['data_dir']の設定に基づいて入力を生成します。 と同じgenerate_inputs()クラスメソッドを提供するDatabaseInputDataクラスが、データベースに接続してSQLクエリを実行するとします。それは異なる設定を探します。等

__init__メソッドではこれを行うことはできません。これは、シングルインスタンスを初期化するためのものです。クラスを生成するインスタンスが0個の場合は、__init__も呼び出されませんが、にはのインスタンスをいくつ生成する必要があるかを確認する責任があります。

+0

ここでは項目24を見ることができますが、詳細はあまりありません。 http://ptgmedia.pearsoncmg.com/images/9780134034287/samplepages/9780134034287。あなたがここで詳細を確認することができ –

+0

PDF:http://qiita.com/giwa/items/fd563a93825714cffd70 –

+0

そして、ここhttps://books.google.com/books?id=ocmqBgAAQBAJ&pg=PA64&lpg=PA64&dq=effective+python+item+ 24 +は= +構築+オブジェクト+総称&ソース= BL&OTS = ZCiluYiAcz&SIG = XBx3spHBqq7mcimUR9f3MVd6ugs&HL = EN&SA = X&VED = 0ahUKEwjOy5zzh_TMAhUHfVIKHXOWAhcQ6AEIHzAB#V = 1ページ分&Q =実効%20python%20item%2024% 20use%20polymorphism%20to%20construct%20objects%20generically&Fに+多型+を使用します偽 –

関連する問題