Что «лучше» практики? Передача объектов Ссылки или метод объекта Список литературы в Python

StackOverflow https://stackoverflow.com/questions/4641216

Вопрос

Я пишу небольшой кусок кода в 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», доступны здесь:

http://hop.perl.plover.com/

(Посмотрите в главу 1, часть 6). Хотя это книга Perl (а не Python), обсуждение, которые имеются именно к вопросу, заданным здесь, и описанные здесь функциональные методы могут быть применены к Python аналогичным образом.

Другие советы

Я скажу второй подход; потому что это определенно выглядит как Перезвоните которые они очень используются при использовании Голливудский принцип (Не называйте нас, мы позвоним вам), которая является парадигмой, которая помогает в разработке кода с высокой сплоченностью и низкой муфтой [REF 2] .

Я определенно пошел бы со вторым подходом.

Также считайте, что вы можете изменить интерфейс любого класса манипулятора так, чтобы process вместо этого пишется __call__, И тогда он будет работать прозрачно со вторым подходом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top