覆盖抽象基础 class 属性会影响其他子 class 吗?

Does overriding an abstract base class attribute affect other child classes?

如果我更改抽象基础 class 字段的属性,如

Classname._meta.get_field(fieldname).attribute = 'value'

它会影响其他子 classes 字段吗?

tl;dr - 更改并没有神奇地反映到抽象之前的用法 class。

取决于您在哪里更改属性。如果您在定义 child class 之前执行此操作,则更改将反映在该特定 child class 中,但如果您在 child 之后执行此操作] class 已定义,它不会影响 child class' 属性。

class Foo(models.Model):
    char = models.CharField(default='world!', max_length=32)

    class Meta:
        abstract = True

class Bar1(Foo):
    pass

print('bar1 -', Bar1._meta.get_field('char').default)

Foo._meta.get_field('char').default = 'hello!'
print('changed to hello!')

class Bar2(Foo):
    pass

print('bar1 -', Bar1._meta.get_field('char').default)
print('bar2 -', Bar2._meta.get_field('char').default)

Foo._meta.get_field('char').default = 'magic!'
print('changed to magic!')

class Bar3(Foo):
    pass

print('bar1 -', Bar1._meta.get_field('char').default)
print('bar2 -', Bar2._meta.get_field('char').default)
print('bar3 -', Bar3._meta.get_field('char').default)

给出以下输出 -

bar1 - world!
changed to hello!
bar1 - world!
bar2 - hello!
changed to magic!
bar1 - world!
bar2 - hello!
bar3 - magic!