4

いくつかの Python ライブラリで、django Models や Tastypie Resources のように、オブジェクト内で Meta という名前のクラス定義を使用する一般的なパターンを見てきました。また、Celery Tasks のようにこれを使用しないものもあります。

これには明らかな理由がありますか?Tastypie のコードから、一部のメタクラスが内部の Meta クラス定義を操作していることがわかります。モデルのメタデータと単純な属性に違いはありますか? django モデルでは簡単に言うことができます: 属性は age = IntegerField のような単なるフィールドですが、フィールドと呼ばれる属性で考えるか、メタデータに _attrs または __attrs を使用することができます。

これは良い習慣だと思いますか?

さよなら。

編集:

これに何かを追加したいと思います:

同様の方法でこれに近づいているライブラリは他にありますか? または同じことを行うさまざまな方法がありますか?ここで確認できる一般的なパターンはありますか?ありがとう。

ライブラリを開始したいのですが、どちらも好きで、この 2 つのライブラリとはあまり関係がないため、どちらかを選択しても一貫性の問題はありません。

さよなら。

4

1 に答える 1

5

いいえ、単なる規則以外の違いはありません。TastyPie は、Django モデルが「データ」と「メタデータ」(データに関するデータ) を分離するために使用するのと同じ規則を使用しているだけです。

メタクラスとMetaクラス

また、メタクラスはクラス属性と内部クラスの両方にアクセスできるため、これは重要な役割を果たしません。

なぜ_attrsですか__attrs

名前を付けることはできますが_attrs(名前マングリング メカニズムによるものではない可能性があります__attrs)、規則が異なります (先頭のアンダースコアは、API が公開されていないことを意味します)。

なぜMetaTastyPieに?

TastyPie とオプションを保存するための内部クラスの場合の理由については、最新の DjangoCon US 2012 で行われた「 API Design TipsMeta 」という名前の Daniel Lindsley (TastyPie の作成者) のプレゼンテーションを見ることをお勧めします: http:// www.youtube.com/watch?v=IKQzXu43hzY - TastyPie の API を構築するためにこの特定のアプローチを使用する理由が明確に示されています。

一貫性について少し

これは良い習慣と見なされますか?」の部分については、PEP8 の一部 (「スタイル ガイド」、特に一貫性に関する部分) を引用します。

スタイルガイドは一貫性に関するものです。このスタイル ガイドとの一貫性が重要です。プロジェクト内の一貫性はより重要です。1 つのモジュールまたは機能内での一貫性が最も重要です。

したがって、私はこのアプローチ (TastyPie のアプローチ) を、それが開発されたフレームワーク (つまり、Django) との一貫性の印として扱います。

グッドプラクティスについて一言

はい、それは良い習慣です(一貫性を保つため)。また、広く採用されている Python スタイル ガイド (PEP8) の命名規則を使用することもお勧めします。ただし、Meta内部クラスの使用は単なる慣例です。Celery タスクの拡張機能を作成している場合は、ユーザーを混乱させないように、命名規則に固執することをお勧めします。

于 2012-11-07T02:58:09.673 に答える