抽象方法
語法
import
from abc import ABC, abstractmethod
抽象類別
- 繼承ABC
- 抽象方法上面加上
@abstractmethod
1
2
3
4
5
6
7
8
9
from abc import ABC, abstractmethod
class Animal(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def eat(self):
pass
# 繼承ABC,就是抽象類別,不能用抽象類別建立物件
animal = Animal("Animal")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from abc import ABC, abstractmethod
class Animal(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def eat(self):
pass
class Tiger(Animal):
def eat(self):
print("Tiger is eating")
tiger1 = Tiger("Tiger1")
tiger1.eat()
Tiger is eating
抽象類別可以有普通方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from abc import ABC, abstractmethod
class Animal(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def eat(self):
pass
def info(self):
print(f"name: {self.name} ")
class Tiger(Animal):
def eat(self):
print("Tiger is eating")
tiger1 = Tiger("Tiger1")
tiger1.eat()
tiger1.info()
Tiger is eating
name: Tiger1
繼承抽象類別必須實作所有方法
以下程式碼Animal 有 eat() 跟 sleep() 抽象方法,子類別Tiger都必須實作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from abc import ABC, abstractmethod
class Animal(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def eat(self):
pass
@abstractmethod
def sleep(self):
pass
def info(self):
print(f"name: {self.name} ")
class Tiger(Animal):
def eat(self):
print("Tiger is eating")
tiger1 = Tiger("Tiger1")
tiger1.eat()
tiger1.info()
TypeError: Can't instantiate abstract class Tiger without an implementation for abstract method 'sleep'