This is also natural ... However, if you are not careful, you may think "that?". For example, consider a class like this.
class A:
prop1 = 123
prop2 = prop1
def hoge(self):
return 'superhoge'
fuga = hoge
class SubA(A):
prop1 = 777
def hoge(self):
return 'hoge'
When you create a SubA object, hoge () and prop1 will naturally look like this.
>>> a = SubA()
>>> print(a.hoge())
hoge
>>> print(a.prop1)
777
By the way, what about prop2 and fuga? Since they refer to prop1 and hoge respectively, it seems that the same result will be obtained if they are overwritten. However, this is actually the case.
>>> a = SubA()
>>> print(a.fuga())
superhoge
>>> print(a.prop2)
123
From this, we can see that prop2 and fuga refer to the definition of the parent class. As an object-oriented mechanism, the phrase "overwrite with child class" is often used, but it is incorrect. I think you should be careful about how you use words.