抽象方法

語法

import

from abc import ABC, abstractmethod

抽象類別

  1. 繼承ABC
  2. 抽象方法上面加上@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'

results matching ""

    No results matching ""