Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 131

>>> first = Word('ha')

>>> 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')