Что «лучше» практики? Передача объектов Ссылки или метод объекта Список литературы в Python
-
09-10-2019 - |
Вопрос
Я пишу небольшой кусок кода в Python и мне интересно, что другие люди думают об этом.
У меня есть несколько классов, каждый с несколькими методами, и пытаюсь определить то, что «лучше»: пройти объекты с помощью вызовов метода или пропустить методы с помощью вызовов методов, когда требуется только один метод от объекта. В основном, я должен сделать это:
def do_something(self, x, y, manipulator):
self.my_value = manipulator.process(x, y)
или это
def do_the_same_thing_but_differently(self, x, y, manipulation):
self.my_value = manipulation(x, y)
То, как я вижу это, второй, возможно, «лучше», потому что он способствует даже связующей связью / сильнее сопряженности между манипуляциями и другим классом. Мне любопытно увидеть некоторые аргументы для и против этого подхода к случаям, когда на объекте нужен только один метод.
РЕДАКТИРОВАТЬ: Я удалил формулировку OOP, потому что это было явно расстраивая. Я в основном имел в виду свободную муфту и высокую сплоченность.
Решение
Второе решение может обеспечивать развратную муфту, потому что это более «функционально», не более «OOP». Первое решение имеет то преимущество, что он работает на языках, таких как C ++, у которых нет закрытия (хотя можно получить аналогичный эффект, используя шаблоны и функции указателя для элементов); Но на языке, как Python, ИМХО 2-я альтернатива, кажется, более «естественным».
Редактировать: Вы найдете очень хорошую дискуссию «Функциональные», ориентированные на объект «Ориентированные» в бесплатной книге «Высший заказ Perl», доступны здесь:
(Посмотрите в главу 1, часть 6). Хотя это книга Perl (а не Python), обсуждение, которые имеются именно к вопросу, заданным здесь, и описанные здесь функциональные методы могут быть применены к Python аналогичным образом.
Другие советы
Я скажу второй подход; потому что это определенно выглядит как Перезвоните которые они очень используются при использовании Голливудский принцип (Не называйте нас, мы позвоним вам), которая является парадигмой, которая помогает в разработке кода с высокой сплоченностью и низкой муфтой [REF 2] .
Я определенно пошел бы со вторым подходом.
Также считайте, что вы можете изменить интерфейс любого класса манипулятора так, чтобы process
вместо этого пишется __call__
, И тогда он будет работать прозрачно со вторым подходом.