我試圖回到 Python,但我不明白為什么下面的代碼不能按預期作業。
class Cat:
age = 0
class Dog(Cat):
pass
Dog.age = 1
Cat.age = 2
print(Dog.age, Cat.age)
我的輸出是:
1 2
但為什么不Dog.age等于 2?
Dog是子類,Cat修改超類的類變數Cat通常也會影響繼承該變數的每個子類。
uj5u.com熱心網友回復:
的任何屬性都Dog將覆寫從 繼承的屬性Cat。您可以在 中重新定義一個值Cat,但這并不重要,因為它已經被孩子覆寫了。例如:
class Cat:
age = 0 # Cat.age = 0
class Dog(Cat):
pass # Dog.age = Cat.age = 0
Dog.age=1 # Dog.age = 1, and Dog.age no longer points to Cat.age
Cat.age=2 # Cat.age = 2
print(Dog.age, Cat.age) # Dog.age is no longer Cat.age. They are completely different
與此對比:
class Cat:
age = 0 # Cat.age = 0
class Dog(Cat):
pass # Dog.age = Cat.age = 0
Cat.age = 10 # Cat.age = 10
print(Dog.age, Cat.age) # Dog.age points to Cat.age, so Dog.age resolves to 10
uj5u.com熱心網友回復:
繼承是指定義一個新類,而對現有類幾乎沒有修改。新類稱為派生(或子)類,它所繼承的類稱為基(或父)類。類繼承機制允許多個基類,派生類可以覆寫其基類的任何方法,一個方法可以呼叫同名基類的方法。
class Cat:
def __init__(self):
self.age = 2
self.sound = "meow"
class Dog(Cat):
def __init__(self):
super().__init__()
self.sound = "bark"
cat = Cat()
dog = Dog()
print(f"The cat's age is {cat.age}, and the dog's age is {dog.age}.")
print(f"Cats {cat.sound}, and dogs {dog.sound}.")
貓的年齡是2歲,狗的年齡是2歲。
貓叫,狗叫。
因此,您可以看到 dog.age 可以繼承自 Cat 類。注意聲音部分,派生類中的方法覆寫了基類中的方法。也就是說,我們寫了狗的聲音,它優先于類貓的聲音。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/528251.html
標籤:Python遗产
下一篇:<x:Doublex:Key="fontsize">50</x:Double>可以轉換成純屬性語法還是純元素語法?
