私が持っているいくつかのPythonモデルクラスのカスタムモデル属性のリストに簡単にアクセスできるようにしています。ORMとしてMongoEngineを使用していますが、問題は一般的な継承とOOPです。
具体的には、すべてのモデルクラスで継承するMixinクラスのメソッドからカスタムモデル属性にアクセスできるようにしたいと考えています。
次のクラス構造を検討してください。
class ModelMixin(object):
def get_copy(self):
"""
I'd like this to return a model object with only the custom fields
copied. For the City object below, it would run code equivalent to:
city_copy = City()
city_copy.name = self.name
city_copy.state = self.state
city_copy.popluation = self.population
return city_copy
"""
class City(BaseModel, ModelMixin):
name = orm_library.StringField()
state = orm_library.StringField()
population = orm_library.IntField()
これにより、次のことが可能になります。
>>> new_york = City(name="New York", state="NY", population="13000000")
>>> new_york_copy = new_york.get_copy()
ただし、任意のモデルで機能する必要があります。どういうわけか、サブクラスで定義されているカスタム属性を判別し、そのサブクラスのインスタンスをインスタンス化し、親のBaseModelクラス(大量のランダムを含む)から組み込みの属性とメソッドをコピーせずに、それらのカスタムプロパティのみをコピーする必要があります。その中のstuf私は関係ありません。
誰もが私がこれを行うことができる方法を知っていますか?