2016-08-15 4 views
0

んSQLAlchemyのサポートこのような何か:プロパティの振る舞い(ゲッターとセッター)、

class Character(Base): 
    __tablename__ = 'character' 
    id = Column(Integer, primary_key=True) 
    level = Column(Integer) 

    @ColumnProperty(Integer) 
    def xp(self): 
     return self._xp 

    @xp.setter 
    def xp(self, value): 
     self._xp = value 
     while self._xp >= self.xp_to_level_up(): 
      self.level += 1 
      self._xp -= 100 

    def __init__(self, level=0, xp=0): 
     self.level = level 
     self._xp = xp 

どこidlevel、およびxpは、データベースに格納されますでしょう。基本的にはColumnですが、属性の代わりにプロパティがあります。

答えて

2

ジャストテーブルにxp列にマップ_xp列定義を追加し、あなたのセッターのロジックを実装するために、定期的@propertyオブジェクトを使用します。

class Character(Base): 
    __tablename__ = 'character' 
    id = Column(Integer, primary_key=True) 
    level = Column(Integer) 
    _xp = Column('xp', Integer) 

    def __init__(self, level=0, xp=0): 
     self.level = level 
     self._xp = xp 

    @property 
    def xp(self): 
     return self._xp 

    @xp.setter 
    def xp(self, value): 
     self._xp = value 
     while self._xp >= self.xp_to_level_up(): 
      self.level += 1 
      self._xp -= 100 

Naming Naming Columns Distinctly from Attribute Namesを参照してください。

上記店舗characterの表のxpとしてインスタンス上_xp属性が、あなたのコードは、間接的に_xpの値を読み書きするCharacter.xpプロパティを使用しています。

+0

ありがとうございます!いつでも不動産のようなコラムを見たいと思っています^^ –

+0

このようなプロパティは、既存のオプションに何も追加しません。 –

+0

確かにこの特定の場合ではありませんが、時にはプロパティ列のみを持つことができます。 –

関連する問題