これも、当たり前といえば当たり前・・・
しかし、気をつけてないと「あれ?」と思うことがあります。例えば、こういうクラスを考えます。
class A:
prop1 = 123
prop2 = prop1
def hoge(self):
return 'superhoge'
fuga = hoge
class SubA(A):
prop1 = 777
def hoge(self):
return 'hoge'
SubAのオブジェクトを生成すると、hoge()やprop1は当然こうなります。
>>> a = SubA()
>>> print(a.hoge())
hoge
>>> print(a.prop1)
777
ところで、prop2やfugaはどうなるでしょうか?
それぞれ、prop1とhogeを参照してるので、仮に上書きされるのであれば同じ結果になりそうです。
しかし、実際はこうなります。
>>> a = SubA()
>>> print(a.fuga())
superhoge
>>> print(a.prop2)
123
このことより、prop2やfugaが親クラスの定義を参照してることがわかります。
オブジェクト指向の仕組みとして、「子クラスで上書きする」という言い方がなされることがしばしばありますが間違っています。言葉の使い方には気をつけたほうが良いと思います。