Python: плохо ли передавать функции больше информации?

#python #multithreading

#python #многопоточность

Вопрос:

У меня есть два или более потока (созданных с помощью подкласса threading.Потоки) выполняются параллельно, и они часто взаимодействуют друг с другом. Они обмениваются данными, вызывая методы друг друга. Поскольку я делал это, у меня есть каждый поток, передающий самого себя в качестве аргумента, так что все атрибуты этого класса доступны сразу.

Вероятно, это ленивый способ сделать это, поскольку я мог бы определить, какие атрибуты метод должен знать, и передавать только их. Итак, мой вопрос заключается в следующем, передает ли экземпляр целого класса методу менее эффективный, чем просто соответствующие данные?

Ответ №1:

Это не менее эффективно, но может увеличить сцепление — то есть это может привести к тому, что ваша функция станет более зависимой от деталей общей структуры. Это делает код более хрупким — возможно, вам придется вносить больше изменений по всему коду, чтобы учесть изменение структуры.

Комментарии:

1. Отлично, приятно знать. У меня было ощущение, что я делаю что-то не лучшим из возможных способов, поэтому моей первой мыслью было чрезмерное использование ресурсов. Хотя это имеет смысл, спасибо.

Ответ №2:

Python передает ссылки на объекты. Не имеет значения, является ли ваш объект строкой или целым экземпляром класса, полным атрибутов.

Кстати, как сказано в другом ответе, этот выбор дизайна не самый лучший.