Просто пытаюсь улучшить мое использование OO в Python и мне интересно о композиции.Python composition
Скажем, например, у вас есть следующие классы:
Class Breakfast(object):
__init__(self, eggs):
self.eggs = eggs
@property
def yolk(self):
return eggs.yolk
@property
def yolk_colour(self):
return eggs.yolk.colour
OR
return.eggs.yolk_colour
Class Eggs(object):
__init__(self, yolk):
self.yolk = yolk
@property
def yolk_colour(self):
return self.yolk.colour
Class Yolk(object):
__init__(self, colour):
self.colour = colour
И инициализирует их
eggs = Eggs(Yolk("yellow"))
bkfast = Breakfast(eggs)
Если вы хотите получить доступ к желток, он лучше цепи это как в
bkfast.eggs.yolk
Или получить к нему доступ через недвижимость
bkfast.yolk
Вторая версия использует меньше цепочки, хотя все еще делает это за кулисами. В то время как первый показывает вам, что именно происходит. Есть ли предпочтительный метод для этого?
EDIT: Я положил свойство желтка, что он имеет цвет. Если вы хотите получить этот цвет с завтрака, лучше ли иметь свойство завтрака, которое называет свойство яиц или напрямую проникает в сам желток? Или это не имеет значения, поскольку это за кулисами?
http://en.wikipedia.org/wiki/Law_of_Demeter - используйте последний вариант –
http://www.python.org/dev/peps/pep-0020/ Zen of Python: Явный лучше, чем неявный , Простой лучше, чем сложный. – Cilyan
Я бы сказал, что вы должны использовать метод геттера. – 2rs2ts