C# での使用方法について説明します。
Python/Perl で同じ概念を使用できますか?
8 に答える
部分型(クラスである必要はありません。構造体とインターフェイスも部分型にすることができます) は、基本的に、コードが複数のファイルにまたがる単一の型です。
これの主な用途は、コード ジェネレーター (Visual Studio デザイナーなど) が 1 つのファイルを "所有" できるようにする一方で、手書きのコードを別のファイルに配置できるようにすることです。
残念ながら、Python/Perl に同じ機能があるかどうかはわかりません。
C# の部分クラスについては既に説明済みなので、Python の部分だけを取り上げます。多重継承を使用して、クラスの定義をエレガントに配布できます。
class A_part1:
def m1(self):
print "m1"
class A_part2:
def m2(self):
print "m2"
class A(A_part1, A_part2):
pass
a = A()
a.m1()
a.m2()
部分クラスは、複数のファイルに含まれる単なるクラスです。一部を機械で生成し、別の部分をユーザーが編集できるようにする場合もあります。
少し大きくなりすぎたクラスを作成するときに、C# でそれらを使用します。アクセサーとコンストラクターを 1 つのファイルに入れ、すべての興味深いメソッドを別のファイルに入れます。
Perl では、それぞれがパッケージ内にあると宣言する 2 つ (またはそれ以上) のファイルを持つだけです。
(メインプログラム)
use MyClass;
(MyClass.pm)
use MyClassOtherStuff;
package MyClass;
# [..class code here...]
(MyClassOtherStuff.pm 内)
package MyClass;
# [...rest of code here...]
部分型の概念については既に説明しました。
これは python で実行できます。例として、python シェルで以下を実行します。
class A(object):
pass
obj = A()
def _some_method(self):
print self.__class__
A.identify = _some_method
obj.identify()
Python は動的言語であるため、部分クラスのような概念は必要ありません。Python では、実行時に機能を使用してオブジェクトを拡張できるため、クラス宣言を別のファイルに分割できます。
auto-generated code
部分クラスは、何らかのツールで持っている場合に便利です。例については、WCF を使用した Schema First Service Development の質問プロジェクト構造を参照してください。
ロジックを部分クラスに入れることができます。自動生成されたファイルが破棄されて再作成された場合でも、ロジックは部分クラスに保持されます。
Partial 型は、宣言が複数のファイルに分かれている型です。典型的な開発者にとって扱いや読み取りが困難な大きなクラスがある場合、それらを使用して、そのクラス定義を個別のファイルに分割し、各ファイルに論理的に分離されたコードのセクション (たとえば、すべてのパブリック) を配置することは理にかなっています1 つのファイルのメソッドとプロパティ、別のファイルのプライベート、3 番目のデータベース処理コードなど..)
いいえ、Python には同じ構文要素はありません。
Python にもメタ クラスがありますが、これは部分クラスというよりはテンプレート クラスに似ています。メタ クラスの使用法の良い例は、Django ORM です。すべてのテーブル モデルは、メタ クラスから機能が含まれるベース モデル クラスから継承します。これは、パターンのようなアクティブ レコードを可能にするかなりクールなコンセプトです (フル アクティブ レコードですか?)。