在Python的面向對象編程中,類可以通過繼承來獲得其他類的屬性和方法。例如:
class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("Subclass must implement abstract method") class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" dog = Dog("Buddy") print(dog.name) # 輸出 "Buddy" print(dog.speak()) # 輸出 "Woof!"
在這個例子中,Dog和Cat兩個類都繼承了Animal類,它們都有一個speak方法,但是實現不同。
然而,有時候我們可能會遇到繼承未生效的情況。例如:
class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("Subclass must implement abstract method") class Dog: def __init__(self, name): self.name = name def speak(self): return "Woof!" class LabradorRetriever(Dog): def __init__(self, name): super().__init__(name) labrador = LabradorRetriever("Buddy") print(labrador.name) # 輸出 "Buddy" print(labrador.speak()) # TypeError: 'LabradorRetriever' object is not callable
在這個例子中,LabradorRetriever類繼承了Dog類,但是在實例化LabradorRetriever對象時,調用speak方法會拋出TypeError異常,顯示'LabradorRetriever'對象不可調用。
這是因為在LabradorRetriever類中沒有定義__init__方法,而Dog類中定義了__init__方法,Python在實例化對象時會優先調用對象所在類的__init__方法。由于LabradorRetriever類沒有定義__init__方法,Python會調用其父類Dog的__init__方法,但由于Dog類和Animal類沒有繼承關系,因此這樣繼承是無效的。
上一篇python 樹莓派模塊
下一篇vue動態修改radio