Greg Ewing <greg.ew...@canterbury.ac.nz> writes: > On 2/11/22 9:54 am, Julieta Shem wrote: >> But we've left behind a more basic requirement --- the Stack >> class wishes for all the methods already written in some class called >> Pair, > > Is that *really* what you want, though? > > To my way of thinking, a Stack and a Pair are quite different > data structures, each having their own characteristic operations. > > Things I want to be able to do with a Stack: > - Create an empty stack > - Push an item onto the top of the stack > - Pop an item off the top of the stack > > Things I want to be able to do with a Pair: > - Create a pair containing two given objects > - Get the first item > - Get the second item > > I don't see any overlap between these at the conceptual level. > Possibly I might want to use Pairs as part of the *implementation* > of a stack, but that doesn't mean that any Pair methods should > appear as Stack methods.
The code for computing the length of a Pair (which is really a linked list) happens to be the same for computing the length of a Stack. My class Pair has methods map, filter, reduce, ... Stacks could use them too. > Here's how I might do this in a functional style using Python: > > class Pair: > def __init__(self, first, second): > self._first = first > self._second = second > def first(self): > return self._first > def second(self): > return self._second > > class Stack: > def __init__(self): > self._data = None > def push(self, item): > result = Stack() > result._data = Pair(item, self._data) > return result > def pop(self): > rest = Stack() > rest._data = self._data.second() > return self._data.first(), rest > > Note that neither Stack nor Pair inherits from the other. That works too. -- https://mail.python.org/mailman/listinfo/python-list