2017-04-17 3 views
2

私はFlaskでウェブ開発を学んでいます。私はSQLAlchemyを使用しています。典型的なデータベースオブジェクトは、次のように構成されています。SQLAlchemyモデル変数クラスまたはオブジェクトタイプですか?

私の質問は、これらすべてのクラス変数またはオブジェクト変数ですか?彼らは__init__の外にあるので、クラス変数であるように見えますが、それは奇妙に思えます。これに関するポインターは素晴らしいでしょう!ありがとう!

+0

これは通常のPythonクラスコード異なる見えるが、それらは実際のインスタンス(オブジェクト)の変数です。おそらく、より深いレベルでフラスコを知っている人は、それがなぜであるかについてのより多くの情報を与えることができます。私の推測はそれがオブジェクトの継承と関係していることです。 – coralvanda

答えて

4

RoleのタイプColumnのフィールドは、実際にはクラス変数です。しかし、彼らはdeclarative.aqi.DeclarativeMeta.__init__()

で発生した役割の建設、我々はメタクラスdeclarative.aqi.DeclarativeMetadeclarative_base()の戻り値)でBaseから継承された役割を定義する理由は

InstrumentedAttributeデータ記述子である時にInstrumentedAttributeに置き換えられますこれは、__get____set__をインスタンス辞書に適用したものです。その結果、インスタンスを使用して操作を実行できます。次の例で

r.nameデータ記述子である、r.name = 'hello'Role.name.__set__(r, 'hello')と同等である - >r.__dict__['name'] = 'hello'

r = Role() 
r.name = 'hello' 
関連する問題