>>> first
<__main__.Word object at 0x1006ba3d0>
>>> print(first)
<__main__.Word object at 0x1006ba3d0>
Композиция
175
Добавим в класс Word методы __str__() и __repr__(), чтобы он лучше смотрелся:
>>> class Word():
... def __init__(self, text):
... self.text = text
... def __eq__(self, word2):
... return self.text.lower() == word2.text.lower()
... def __str__(self):
... return self.text
... def __repr__(self):
... return 'Word("' self.text '")'
...
>>> first = Word('ha')
>>> first # используется __repr__
Word("ha")
>>> print(first) # используется __str__
ha
Чтобы узнать о других особых методах, обратитесь к документации Python
(http://bit.ly/pydocs-smn).
Композиция
Наследование может сослужить хорошую службу, если вам нужно создать класс-
потомок, который ведет себя как родительский класс большую часть времени
(когда потомок является предком). Возможность создавать иерархии наследова-
ния довольно заманчива, но иногда композиция или агрегирование (когда x имеет y)
имеет больше смысла. Утка является птицей, но имеет хвост. Хвост не похож на
утку, он является частью утки. В следующем примере создадим объекты bill и tail
и предоставим их новому объекту duck:
>>> class Bill():
... def __init__(self, description):
... self.description = description
...
>>> class Tail():
... def __init__(self, length):
... self.length = length
...
>>> class Duck():
... def __init__(self, bill, tail):
... self.bill = bill
... self.tail = tail
... def about(self):
... print('This duck has a', bill.description, 'bill and a',
tail.length, 'tail')
...
>>> tail = Tail('long')