def f(obj):
obj.do()
obj.undo()
Вот такой функции требуется любой объект, который умеет do и undo без параметров. То есть наличие двух тактх методов и есть интерфейс.
Ты можешь записать его как протокол в питоне
class ForF(Protocol):
def do(self):...
def undo(self):...
И соответственно можно сделать класс, объекты которого будут удовлетворять такому протоколу
class Apple:
def do(self): pass
def undo(self): pass
def whatever(self): pass