簡體   English   中英

覆蓋抽象基類屬性是否會影響其他子類?

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

如果我更改抽象基類字段的屬性,如

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

它會影響其他子類字段嗎?

tl; dr - 這種變化並沒有神奇地反映回以前對抽象類的使用。

取決於您更改屬性的位置。 如果在定義子類之前執行此操作,則更改將反映在該特定子類中,但如果在定義子類之后執行此更改,則不會影響子類的屬性。

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!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM