4

これが意味をなさない場合はお詫びします。私は経験豊富なプログラマーではありません。

次のコードを検討してください。

import mymodule

class MyClass:
    def __init__(self):
        self.classInstance = myModule.classInstance()

その後 ......

from mymodule import classInstance

class MyClass(classInstance):
    def __init__(self):
        pass

MyClass で 1 つの classInstance を使用したいだけの場合、モジュールから特定のクラスをインポートして、MyClass にこのクラスを継承させてもよろしいですか?

これら 2 つの方法のどちらかを決定する際に、ベスト プラクティスや考慮すべきことはありますか?

どうもありがとう

4

2 に答える 2

7

別の例を提案させてください。

クラスVectorがあると想像してください。ここで、クラスポイントが必要です。ポイントはベクトルで定義できますが、Vectorにはない他の追加機能があるかもしれません。この場合、VectorからPointを導出します。

次に、Lineクラスが必要です。Lineは、上記のクラスのいずれにも特化したものではないため、おそらくそれらのいずれかから派生させたくないでしょう。ただし、Lineはポイントを使用します。この場合、次のようにLineクラスを開始することをお勧めします。

class Line(object):
    def __init__(self):
        self.point1 = Point()
        self.point2 = Point()

ポイントは次のようになります。

class Point(Vector):
    def __init__(self):
        Vector.__init__(self)

したがって、答えは実際には次のとおりです。何をする必要があるかによって異なりますが、コーディングする内容が明確にわかっている場合は、サブクラス化するかどうかを選択するよりも明らかになります。

お役に立てば幸いです。

于 2012-06-27T09:49:21.020 に答える
0

これら 2 つのアプローチの「どちらかを選択」しようとしているように聞こえますが、これらはまったく異なることを行います。2 番目のものは、(紛らわしい) というクラスから継承するクラスを定義しclassInstanceます。最初のものは、クラスのインスタンスにたまたま設定されるというインスタンス変数を持つMyClass(基本型以外からは継承されない) というクラスを定義します。obectself.classInstanceclassInstance

なぜクラスに名前を付けているのclassInstanceですか?

于 2012-06-27T07:12:21.413 に答える