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.
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.
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__)TypeError