如果我更改抽象基类字段的属性,例如
Classname._meta.get_field(fieldname).attribute = 'value'
它是否也会影响其他子类字段?
最佳答案
tl;dr - 更改不会神奇地反射(reflect)回抽象类的先前用法。
取决于您在哪里更改属性。如果您在定义子类之前执行此操作,则更改将反射(reflect)在该特定子类中,但如果您在定义子类之后执行此操作,则不会影响子类的属性。
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!
关于python - 覆盖抽象基类属性会影响其他子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811381/