私はこのような構造を持ついくつかの工場を持っています。モデルで間違っ継承動作
AbstractFactoryMinimal(DjangoModelFactory):
comment = ''
AbstractFactoryFull(AbstractFactoryMinimal):
comment = Faker(provider='text', max_nb_chars=2000)
FactoryMinimal(AbstractFactoryMinimal):
field = ''
class Meta(object):
model = SomeModel
FactoryFull(FactoryMinimal, AbstractFactoryFull):
field = Faker(provider='text', max_nb_chars=2000)
obj = FactoryFull()
print(obj.comment) # expect some text from faker, but got '' instead
print(obj.field) # works like expected, return some random text
は、私は、私もMRO見
AbstractModel(TimeStampedModel)
と
SomeModel(AbstractModel)
を持っています正確に私がそれが見えると思ったように見えます:
(FactoryFull,
FactoryMinimal,
AbstractFactoryFull,
AbstractFactoryMinimal,
factory.django.DjangoModelFactory,
factory.base.Factory,
factory.base.BaseFactory,
object)
「コメント」フィールドは、fakerによって生成され、 ''で設定されるのではありません。なぜそれがこのように仕事ですか?期待される行動を見るために工場をどのように実装できますか?
EDIT: 私はこれに最後の工場で継承の順序を変更することができます。
FactoryFull(AbstractFactoryFull, FactoryMinimal)
それは動作しますが、私はFactoryMinimalのフィールドを上書きしたい場合は、その後、それは動作しません。そして時々私はこの機能を正確に必要とします。そして、とにかく、これはPythonの最初の継承動作ではありません。
これは知ってもいいけど、どうやって自分が望む行動を達成できるのでしょうか? –
ライブラリを変更せずにMROに依存することはできないので、そのような方法で多重継承を使用しないでください(そして、mixinを除くすべてのmb)。それが私の唯一の提案です。 –