今天的內容為DAY6的延伸,份量不多,就來練習一下吧~
繼承是OOP的一個重要概念,創建一個新類別(子類別),可以繼承另一類別(父類別)的屬性和方法。
重用程式碼建立層次結構。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
dog = Dog("Fido")
cat = Cat("Whiskers")
print(dog.speak()) # Output: "Fido says Woof!"
print(cat.speak()) # Output: "Whiskers says Meow!"
在上面的示例中,Dog 和 Cat 類別都繼承自 Animal 父類別,它們都有一個 speak 方法,但是每個方法的實現方式不同。
class SuperClass:
def __init__(self, value):
self.value = value
def method(self):
print("Method called")
class SubClass(SuperClass):
def __init__(self, value):
# Call the superclass's __init__ method
super().__init__(value)
def method(self):
# Call the superclass's method
super().method()
print("Subclass method called")
# Create an instance of SubClass
obj = SubClass(10)
# Call the method of SubClass
obj.method() # Output: "Method called", "Subclass method called"
print(obj.value)
obj = SubClass("SUB")
print(obj.value)
#Subclass method called
#Method called
#10
#SUB
Python允許一個子類別繼承多個父類別的特性,這種情況下,子類別繼承了多個父類別的屬性和方法。
class A:
def method_a(self):
print("Method A")
class B:
def method_b(self):
print("Method B")
class C(A, B):
def method_c(self):
print("Method C")
obj = C()
obj.method_a() # Output: "Method A"
obj.method_b() # Output: "Method B"
obj.method_c() # Output: "Method C"
在這個示例中,類別 C 同時繼承自類別 A 和 B,因此它可以訪問這兩個父類別的方法。
封裝是OOP中的另一個重要概念,它指的是將類別的屬性和方法保護起來,以防止外部直接訪問或修改。在Python中,我們可以先使用單個下劃線(_)前綴屬性名稱來表示該屬性是私有的,建議不要直接訪問。
class MyClass:
def __init__(self, value):
self._value = value # 單個下劃線表示半私有屬性
def get_value(self):
return self._value
def set_value(self, new_value):
if new_value >= 0:
self._value = new_value
obj = MyClass(10)
print(obj.get_value()) # Output: 10
obj.set_value(20)
print(obj.get_value()) # Output: 20