ゲームエンジンがsteamid
プロパティでPlayer
クラスで私を提供(C++から来て、これはそれがPythonでどのように見えるかの単なる基本的な例です):基本クラスのプロパティ/属性を表の列として使用しますか?
私は、このクラスをサブクラスに進みgold
属性追加しているとき:
# my_plugin.py
class MyPlayer(game_engine.Player, Base):
gold = Column(Integer)
を今私は、プレイヤーのgold
プレイヤーのsteamid
プレーヤーを識別するための主キーとして使用してデータベースへの格納する必要があります。 SQLAlchemyに、基本クラスのsteamid
プロパティをプライマリキーとして使用するように指示するにはどうすればよいですか?ここで
は、私が試した愚かな何か:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.hybrid import hybrid_property
import game_engine
Base = declarative_base()
class Player(game_engine.Player, Base):
__tablename__ = 'player'
_steamid = game_engine.Player.steamid
@hybrid_property
def steamid(self):
return type(self)._steamid.__get__(self)
しかし、これはこれはclassical mapping
from sqlalchemy import Column, Integer, Table
from sqlalchemy.orm import mapper
from sqlalchemy.ext.hybrid import hybrid_property
class MyPlayer(Player):
def __init__(self, steamid, gold):
super().__init__(steamid)
self.gold = gold
self._steamid = super().steamid
player = Table('player', Base.metadata,
Column('_steamid', Integer, primary_key=True),
Column('gold', Integer),
)
mapper(MyPlayer, player)
私はこの解決法がこれを行う "正しい"方法だと思っていますが、個人的にはr-m-nの答えを使用することになります。私はこれがSOのガイドラインに沿っていることを願っています... –
ガイドラインは100%明確ではありませんが、それはあなたの恩恵です。最も重要なことは、あなたが賞金をすべて授与したということです。私はまだ受け入れに感謝しています。 – Julian
2番目の考えでは、r-m-nのソリューションを使う理由を明確にすることができますか?私には、それは自己罰のようだ... – Julian