1

MongoDb にマップするカスタム ORM コードがあるこの python コード ベースに出くわしました。既存のコード パターンに従って新しいエンティティを作成するように依頼されました。Python コードを書き始めてまだ 1 週間しか経っていません。しかし、プロパティなどとしてマークされたゲッタースタイルのメソッド名のこの組み合わせは紛らわしいと思います。ここで多くのコンテキストを提供していないことはわかっています。しかし、この api が優れた python プログラミング api pov からどのように見えるかについて説明したいと思います。

そのpython 2.7。

class Entity(object):
    def save(self): 
    ...

class Person(Entity):
  ...
  @property
  def get_config(self):
    return getattr(self, 'config', None)

  def set_config(self, config):
    self.set('config', config)
  ...
4

1 に答える 1

3

それはそれほど良く見えません。静的な値を取得および設定するためだけに Python でゲッター/セッターを使用する理由はありません。この質問を参照してください。アクセスごとに属性値を実際にプログラムで計算する必要がある場合にのみ、それらを使用する必要があります。

また、getattr属性が未定義の場合に None を返すために使用する代わりに、単に None に初期化する必要があります。その後、その値を無条件に読み取ることができます。

そう:

class Person(Entity):
    def __init__(self):
        # initialize config to None
        self.config = None

後で、他のコードがconfigsomePerson という Person インスタンスの属性を読み取る必要がある場合は、次のようにします。

somePerson.config

設定する必要がある場合は、次のようにします。

somePerson.config = newConfig
于 2013-05-06T18:41:10.333 に答える