Pythonでは、関数を含むモジュールまたは関数を含むクラスを含むモジュールを定義する方が良いと考えられますか?[閉まっている]


13

私のコードでは、上記の2つのオプションのいずれかが同様に機能しますが、両方のアプローチの長所と短所を見つけることに興味があります。

回答:


9

それは正直あなたのニーズに依存します。ほとんどの場合、関数のモジュールが探しているものになります。

Pythonクラス(imho)は、C#、C ++、またはJavaのクラスのように考えるべきではありません。一連の関数をより大きな親にグループ化する論理的な理由が必要です。データ構造はこの良い例です汎用の緩やかに収集された関数のセットではなく、クラスに直接適用される一致する関数のセット。

  • 機能モジュール:汎用、ユーティリティ、およびその他の「グローバル」機能
  • 機能クラスのモジュール:同様のニーズのグループ化されたクラス、異なるリンクリストデータタイプ、オーディオ処理機能、または異なるツリータイプ。

モジュールは、類似したシステムの全体的な階層グループ化のためのものです。通常、すべてのユーティリティ機能は単一のモジュールの下に、すべてのデータは別のモジュールの下に、データ層とコネクタはより「親」タイプのモジュールの下にあります。モジュールは単なるメンタルグルーピングであるため、その中にあるシステムの種類(クラスまたは機能、正直なところ2つが混在している可能性が高い)やモジュール下のシステム間の論理的な接続についてはあまり重要ではありません。


6
Pythonクラスと他の言語の違いがわかりません。グループ化される論理的な理由のない関数を持つクラスは、どの言語で作成しますか?
ガイサートン

7

基本的な質問は、モジュール/クラスの異なるインスタンスが必要かどうかです。Pythonモジュールはシングルトンのようなものです-常に同じオブジェクトを参照します。つまり、インスタンスが必要な場合はクラスが必要です。

ただし、インスタンスが必要ない場合は、「オブジェクト」を初期状態に設定する必要があるかもしれません。これは単純なモジュールでは明らかに可能ですが、初期化が値を設定するよりも複雑な場合は__init__、読みやすくするためにクラスのメソッドにコードを初期化することをお勧めします。


2
たとえば、グローバル変数を使用したモジュールとメンバー変数を使用したクラスなど、状態のあるものについて話していることに注意してください。クラスにメソッドのみがあり、状態がない場合、複数のインスタンスを持つ理由はほとんどありません
-thbusch

3
@thbusch、はい、これはインスタンス必要とすることを意味します
kr1

モジュールとクラスを理解できるようにするインスタンスの必要性について話したとき。複数の車を作成する必要がある場合、クラスは電卓モジュールに対して適切であり、電卓を大量に作成する必要はないので、そのモジュールの加算メソッドと減算メソッドを使用するだけです。
タズボーイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.