ADT-nin müqaviləsi sənəddə qalmamalıdır: onu abc.ABC və ya typing.Protocol ilə kodda yazırıq, iki fərqli strukturla implementasiya edirik və ortaq testlərlə yoxlayırıq. Dərs ADT və verilənlər strukturu mövzusunun Python-da davamıdır; dil alətlərinin özü üçün mücərrəd siniflər və generics və protokollar dərslərinə baxın.

Abstrakt Stack, onun iki implementasiyası və ortaq müqavilə testləri
Abstrakt Stack, onun iki implementasiyası və ortaq müqavilə testləri

ABC: məcburi interfeys

Stack sinfi ABC-dən miras alır və push, pop, __len__ metodlarını @abstractmethod edir. Alt sinif birini unutsa, obyekt yaradılanda TypeError alırsınız, yəni səhv istifadədən əvvəl tutulur. is_empty kimi hazır metodlar bütün implementasiyalara pulsuz verilir.

python
from abc import ABC, abstractmethod

class Stack(ABC):
    @abstractmethod
    def push(self, x): ...

    @abstractmethod
    def pop(self): ...

    @abstractmethod
    def __len__(self): ...

    def is_empty(self):
        return len(self) == 0

class Broken(Stack):
    def push(self, x):
        pass

try:
    Broken()
except TypeError as e:
    print(type(e).__name__)
text
TypeError

İki implementasiya