タグ付けされた質問 「base-class」

22
Pythonでのシングルトンの作成
この質問は、シングルトンデザインパターンが望ましいかどうか、アンチパターンであるかどうか、または宗教戦争の場合ではなく、このパターンがPythonで最もPython的に実装される方法について議論するためのものです。この場合、私は「ほとんどのpythonic」を「最小の驚きの原則」に従うことを定義します。 シングルトンになる複数のクラスがあります(私のユースケースはロガー用ですが、これは重要ではありません)。単に継承したり装飾したりできるときに、追加されたガンフを使用していくつかのクラスを散らかしたくありません。 最良の方法: 方法1:デコレーター def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 長所 デコレータは、多くの場合、複数の継承よりも直感的な方法で追加されます。 短所 MyClass()を使用して作成されたオブジェクトは真のシングルトンオブジェクトですが、MyClass自体はクラスではなく関数なので、そこからクラスメソッドを呼び出すことはできません。またためm = MyClass(); n = MyClass(); o = type(n)();、その後m == n && m != o && n != …

30
インターフェイスと基本クラス
いつインターフェイスを使用する必要があり、いつ基本クラスを使用する必要がありますか? メソッドの基本実装を実際に定義したくない場合は、常にインターフェースにする必要がありますか? 犬と猫のクラスがある場合。PetBaseの代わりにIPetを実装したいのはなぜですか?IShedsまたはIBarks(IMakesNoise?)のインターフェースをペットごとに配置できるため、それらを使用できることは理解できますが、一般的なペットにどのインターフェースを使用すればよいかわかりません。

11
サブクラスへのポインターでの削除は、基本クラスのデストラクターを呼び出しますか?
私は、class Aそのフィールドの1つにヒープメモリ割り当てを使用しています。クラスAはインスタンス化され、別のクラス(class B。 クラスBのオブジェクトが完了したら、を呼び出しますdelete。これは、デストラクターを呼び出すと想定しています...しかし、これはクラスAのデストラクターも呼び出しますか? 編集: 答えから、私はそれを採用します(間違っている場合は編集してください): delete BのインスタンスがB ::〜B();を呼び出す 呼び出す A::~A(); A::~A deleteAオブジェクトのヒープに割り当てられたすべてのメンバー変数を明示的に指定する必要があります。 場合-最後のメモリブロックの記憶は、クラスBのインスタンスがヒープに返される前記新しいは、それが最初にすべてのデストラクタがオブジェクトを完成させるために呼び出された今後、それを初期化するコンストラクタを呼び出し、次に、ヒープ上のメモリのブロックを割り当てられ、使用されましたオブジェクトが常駐していたブロックがヒープに返されます。

8
C#クラスの命名規則:BaseClass、ClassBase、AbstractClass
基本クラスの命名に推奨されるアプローチは何ですか?タイプ名の前に「Base」または「Abstract」を付けるのですか、それとも単に「Base」を付けるのですか? 以下を検討してください。 タイプ:ViewModel例:MainViewModel、ReportViewModel 基本クラス:BaseViewModelまたはViewModelBaseまたはAbstractViewModel 次の点も考慮してください。 タイプ:ProductたとえばVirtualProduct、ExpiringProduct 基本クラス:BaseProductまたはProductBaseまたはAbstractProduct どちらがより標準的だと思いますか? class Entity : EntityBase { } または class Entity : BaseEntity { }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.