Что такое делегирование python

Делегирование метода в python

Я пишу небольшой фреймворк для оркестровки кластеров AWS, и есть некоторые общие иерархические паттерны, которые появляются снова и снова. Одним из таких паттернов является сбор коллекции экземпляров в более крупный объект, а затем делегирование некоторых методов непосредственно всем экземплярам. Поэтому вместо того чтобы копировать и вставлять один и тот же шаблонный код снова и снова я абстрагировал его следующим шаблоном:

Есть ли лучший способ или образец для выполнения делегирования?

2 ответа

Я только что столкнулся с делегированием в python и не могу понять разницу между делегированием и наследованием. Почему нужно использовать делегирование, а не наследование??

Я наткнулся на это в своем учебнике,но я даже не знаю, что такое делегирование. Я знаю, что такое инклюзия,но не знаю, что такое делегирование. В контексте Ruby сравните делегирование с включением модуля с точки зрения понятия интерфейсов классов. При включении модуля методы, определенные в.

__getattr__ вызывается, когда пройдена вся иерархия классов и атрибут не найден. Поэтому лучше сгенерировать метод один раз и сохранить его в классе. Тогда в следующий раз поиск метода займет меньше времени.

Здесь вы можете увидеть адаптацию вашего кода для этого:

Я исследовал этот вопрос и нашел два решения. Используйте декоратор для изменения класса и создания делегаторов или используйте дескрипторы для делегаторов. Я начал с первого, а затем перешел ко второму, который мне нравится больше, поэтому я начну с него. Оба можно найти здесь: https://gist.github.com/dhilst/7435a09b4419da349bb4cc4ae855a451 с доктестами 🙂

Для всех, кто заинтересован, я сделал это библиотекой: https://pypi.org/project/delegateto/

Были ошибки в реализации gist, люди внесли свой вклад в это на github, проект pypi обновлен, gist нет. Я настоятельно рекомендую вам использовать версию pypi.

Использование дескрипторов

Дескрипторы-это вещи, которые можно получить и установить. В данном случае нас интересует возможность получения дескрипторов. Дескриптор делегата определен следующим образом

И используется так

Использование декораторов

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

Использование также простое, просто украсьте класс столько раз, сколько захотите. Декоратор изменит класс inplace таким образом, что будет возвращен тот же класс.

Опять же, я действительно рекомендую вам ознакомиться с gist: https://gist.github.com/dhilst/7435a09b4419da349bb4cc4ae855a451 в строке документа есть множество примеров. Просто измените их и выполните сценарии, чтобы поиграть.

Для любого заинтересованного органа я делаю это pip пакет https://pypi.org/project/delegateto/

Были ошибки в реализации gist, люди внесли свой вклад в это на github, проект pypi обновлен, gist нет. Я настоятельно рекомендую вам использовать версию pypi.

Как бы я сделал делегирование событий в стиле jQuery с простым JavaScript в Hammer.js? E.g.: Hammer(document).on(‘tap’, ‘.item’, function () < console.log('tapped') >) Возможно ли это напрямую или я должен сам сделать делегирование?

Есть ли веская причина использовать делегирование вместо наследования? Я думаю, что все, что может быть сделано делегированием, может быть сделано по наследству. Является ли мое понимание концепции неправильным. Существует ли ситуация, в которой мы вынуждены использовать делегирование в ruby.

Похожие вопросы:

В документации говорится, что делегирование интерфейса доступно только для Win32. В настоящее время я не могу проверить это, это ошибка документации или делегирование интерфейса прекращено в.

Я только что столкнулся с делегированием в python и не могу понять разницу между делегированием и наследованием. Почему нужно использовать делегирование, а не наследование??

Я наткнулся на это в своем учебнике,но я даже не знаю, что такое делегирование. Я знаю, что такое инклюзия,но не знаю, что такое делегирование. В контексте Ruby сравните делегирование с включением.

Как бы я сделал делегирование событий в стиле jQuery с простым JavaScript в Hammer.js? E.g.: Hammer(document).on(‘tap’, ‘.item’, function () < console.log('tapped') >) Возможно ли это напрямую или я.

Есть ли веская причина использовать делегирование вместо наследования? Я думаю, что все, что может быть сделано делегированием, может быть сделано по наследству. Является ли мое понимание концепции.

У меня есть два модуля: defmodule Base.ModuleOne do def do_stuff(opts) do some stuff with opts end end defmodule Base.ModuleTwo do defdelegate do_stuff(opts), to: Base.ModuleOne end Как правильно.

Я действительно сбит с толку делегацией kotlin. Позвольте мне описать здесь подход регулярного полиморфизма, который выглядит так же, как и kotlin delgation. interface Base < fun print() >class.

Источник

20 вопросов и ответов из интервью на позицию Python-разработчика

Статья нацелена на помощь в подготовке к собеседованию на должность Python-разработчика. Поможет в подготовке как новичкам, так и профессионалам!

Уважаемые читатели, представляем вашему вниманию ответы на вопросы из интервью на позицию Python-разработчика, каждый ответ сопровождается подробным объяснением. Представленные 20 вопросов помогут вам, подготовится к техническому интервью и отборочным онлайн тестам, которые обычно проводятся в университетах. Статья подходит как новичками в области собеседований, так и тем, кто проходил бесчисленное количество раз.

После прочтения этих сложных Python-вопросов, вы легко сможете задавать объектные типы и множественные типы в Python.

Какие есть способы написания функции, которая использует передачу параметров по ссылке?

Аргументы в Python передаются по значению. Значение создается путем присваивания, результатом которого является объект, который не имеет никаких связей между именем аргумента на входе и выходе. Процедура написания функции, которая использует передачу параметров по ссылке, включает в себя:

Результатом является кортеж, который может быть возвращен объекту, который вызвал его. Ниже представлен пример, наглядно демонстрирующий это:

Какие команды используются для копирования объектов в Python?

Команда, используемая для копирования объектов в Python, включает в себя:

Словарь состоит из всех объектов и метода copy(), который используется, как показано ниже:

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

В чем заключается разница между полным и поверхностным копированием?

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

Объекты не имеют имен, поэтому нет способа узнать имя объекта. Операция присвоения используется для связывания имени и значения, которое включает в себя имя объекта, к которому должно быть привязано значение. Если к этому значению можно обратиться, то результатом присвоения будет true, то следующая программа может использоваться для поиска ссылочного имени объекта.

Класс состоит из имени, а имена вызываются с помощью переменной B, это создает экземпляр класса try. Суть метода заключается в том, чтобы среди всех областей видимости определить, что объект существует, и уже после этого вывести его имя.

Приведите пример использования тернарного оператора в Python.

Тернарный оператор – это оператор, который используется для демонстрации какого-либо условия, то есть вместо условной конструкции. Он состоит из истинного или ложного значений и выражения, которое должно быть вычислено для этих значений. Ниже приведен пример тернарного оператора:

Тернарный оператор имеет самый низкий приоритет, используемый для принятия решения, которое основано на значении условия, будет оно истинно или ложно. В нашем примере, выражение “если x ’ используется для того, чтобы показать формат строки, что позволяет преобразовывать строку в «перевернутую» (запись строки в обратном порядке) форму данных. Для однородности списка данных можно воспользоваться модулем для работы с массивами, что даст вам возможность более структурированно хранить свои данные.

Опишите процесс запуска под-процесса с помощью двунаправленных каналов.

Модуль popen2() используется для запуска под-процессов, но из-за сложности таких процессов, как: блокировка потоков, которая блокирует процесс, что приводит к ожиданию выходных данных от «потомка», а «потомок», в свою очередь, ждет данные на вход. Дэдлоки возникают из-за плохой синхронизации «родителя» и «потомка», что приводит к ожиданию обоих на получение доступа к процессу, чтобы предоставить ресурсы друг другу. Использование метода popen3() дает возможность чтения таких потоков, как: stdout и stderr для того, чтобы занимать появившееся в буфере место, и в те моменты, когда чтение не происходит (read() не срабатывает), распределять ресурсы. Метод popen2() предотвращает дэдлоки, за счет такиех методов, как: wait() и waitpid(), который сперва завершает процесс, и в момент, когда приходит запрос, то он передается на ожидающий процесс.

Ниже приведен пример программы, которая создает и запускает процесс:

Какие существуют, различные методы генерации рандомных чисел?

Модуль random – это стандартный модуль, который используется для генерации рандомных чисел.

Этот метод определяется так:

Конструкция метода random.random() числа с плавающей точкой в диапазоне [0, 1). Функция генерирует рандомные числа с плавающей точкой. Методы, которые используются с random-классом являются связанными методами скрытых экземпляров. Экземпляры класса Random можно использовать в многопоточных программах, в которых для каждого потока создается отдельный экземпляр. Далее представлены другие генераторы рандомных чисел:

Приведите пример паттерна singleton в Python.

Singleton – это паттерн, предназначенный для того, чтобы ограничивать количество экземпляров, которые могут быть использованы одним классом. Также этот паттерн позволяет расшаривать один и тот же объект среди многих других частей кода. Это позволяет использовать глобальные переменные, поскольку фактически используемые данные скрыты интерфейсом класса singleton. Интерфейс класса singleton имеет только один публичный член класса и один метод этого класса Handle. Приватные конструкторы не используются для создания объектов, которые используются вне класса. Процесс ждет статического члена функции для того, чтобы создать новый экземпляр и вернуть singleton-объект:

Источник

Метод делегирования в питоне

Я пишу небольшую структуру для организации кластеров AWS, и есть несколько общих иерархических шаблонов, которые появляются снова и снова. Одним из таких шаблонов является сбор коллекции экземпляров в более крупный объект, а затем делегирование некоторых методов напрямую всем экземплярам. Поэтому вместо того, чтобы копировать и вставлять один и тот же шаблонный код снова и снова, я абстрагировал его следующим образом:

Есть ли лучший способ или шаблон для выполнения делегирования?

2 ответа

__getattr__ вызывается, когда пройдена вся иерархия классов и атрибут не найден. Так что лучше сгенерировать метод один раз и сохранить его в классе. Тогда поиск метода займет меньше времени в следующий раз.

Здесь вы можете увидеть адаптацию вашего кода для этого:

Я исследовал это и нашел два решения. Используйте декоратор, чтобы изменить класс и создать делегаторы, или используйте дескрипторы для делегаторов. Я начал с первого, а затем развивался до второго, который мне нравится больше, поэтому я начну с него. И то, и другое можно найти здесь: https://gist.github.com/dhilst/7435a09b4419da349bb45cc1/a4aa5555aa55 докуты 🙂

Для всех, кто заинтересовался, я сделал эту библиотеку: https://pypi.org/project/delegateto/

Были ошибки в реализации gist, люди внесли свой вклад в github, проект pypi обновлен, gist нет. Я настоятельно рекомендую вам использовать версию Pypi.

Использование дескрипторов

И используется так

Использование декораторов

Каждый раз, когда вам необходимо периодически менять поведение класса, кандидатом является декоратор. В этом случае декоратор вызовет setattr в классе для создания делегаторов.

Использование также просто, просто украсьте класс, сколько раз вы хотите. Декоратор изменит класс на месте так, чтобы тот же класс был возвращен.

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

Для любого заинтересованного лица я делаю этот пакет в пипсах https://pypi.org/project/delegateto/

Были ошибки в реализации gist, люди внесли свой вклад в github, проект pypi обновлен, gist нет. Я настоятельно рекомендую вам использовать версию Pypi.

Источник

Метод делегирования в питоне

Я пишу небольшую структуру для организации кластеров AWS, и есть несколько общих иерархических шаблонов, которые появляются снова и снова. Одним из таких шаблонов является сбор коллекции экземпляров в более крупный объект, а затем делегирование некоторых методов напрямую всем экземплярам. Поэтому вместо того, чтобы копировать и вставлять один и тот же шаблонный код снова и снова, я абстрагировал его следующим шаблоном:

Есть ли лучший способ или шаблон для выполнения делегирования?

1 ответ

__getattr__ вызывается, когда весь класс hirarchy пройден, а атрибут не найден. Поэтому лучше сгенерировать метод один раз и сохранить его в классе. Тогда поиск метода займет меньше времени в следующий раз.

Здесь вы можете увидеть адаптацию вашего кода для этого:

Я исследовал это и нашел два решения. Используйте декоратор, чтобы изменить класс и создать делегаторы, или использовать дескрипторы для делегаторов. Я начал с первого, а затем эволюционировал до второго, который мне нравится больше, поэтому я начну с него. И то, и другое можно найти здесь: https://gist.github.com/dhilst/7435a09b4419da349bb4cc4ae855a451 с документами:)

Использование дескрипторов

И используется так

Использование декораторов

Каждый раз, когда вам необходимо периодически менять поведение класса, кандидатом является декоратор. В этом случае декоратор позвонит setattr в классе, чтобы создать делегатов.

Использование также просто, просто украсить класс, сколько раз вы хотите. Декоратор изменит класс на месте так, чтобы тот же класс был возвращен.

Источник

#003 Делегирование. Основы

Продолжаю потихоньку публиковать избранные параграфы из книжки Управление digital-проектами. Ссылки на предыдущие части — в конце материала.

Делегирование — это передача части полномочий или ответственности другим людям. Как правило — своим подчиненным.

Делегирование невозможно без грамотного планирования. Банально, у вас не останется времени ни на постановку заданий в нужной форме, ни на контроль.

Делегирование — ахиллесова пята российского менеджмента. Руководители делегируют плохо, боятся или ленятся это делать. Многие просто не умеют, поскольку делегированию, как и вождению автомобиля, нужно учиться. Менеджер, который не умеет делегировать — бутылочное горлышко организации: он набирает на себя слишком много задач и стремится большую их часть сделать самостоятельно. Грамотное делегирование — это точка роста организации.

Что такое делегирование python. Смотреть фото Что такое делегирование python. Смотреть картинку Что такое делегирование python. Картинка про Что такое делегирование python. Фото Что такое делегирование python

Вы, как менеджер, можете вообще ничего не делать своими руками и ничего не производить. Но при этом вы отвечаете за выработку управленческих решений, распределение задач, нагрузку своих подчиненных. Делегирование — это передача подчиненному задачи вместе с необходимыми для её выполнения ресурсами. Например — полномочиями и ответственностью: за качество, сроки и другие явно или неявно согласованные параметры.

§2.2.1 Что делегировать. Делегирующая сила

Что такое делегирование python. Смотреть фото Что такое делегирование python. Смотреть картинку Что такое делегирование python. Картинка про Что такое делегирование python. Фото Что такое делегирование python

Я завел себе регулярную привычку — раз в пол года просматриваю список дел, которыми занимаюсь. Смотрю, сколько времени они у меня отнимают. Оцениваю, насколько они мне нравятся, или насколько они превратились в рутину. Смотрю, должен ли я их делать сам. Можно ли делегировать что-то из рутины, неприятных мне дел или тех задач, где лучше справится специалист. Планирую, когда, кому и что я могу делегировать и в каком виде. Помогает табличка — что можно, а что нельзя делегировать.

Что можно делегировать

Что нельзя

Рутина (тестирование, перенос задач в тикет-систему)

Планирование, целеполагание, выработка стратегии, контроль результатов

Специализированная работа (программирование, дизайн)

Руководство сотрудниками, мотивация, поощрения и наказания

Подготовительная работа (подготовка отчетов, договоров)

Задачи с высокой степенью риска, неопределенности, новизны, необычности или задачи личного (строго доверительного) характера

Горящие дела, без запасов времени на делегирование и проверку

Заведите себе ритуал просмотра рутины. Или регулярную задачу в вашем таск-трекере. И постепенно увеличивать вашу делегирующую силу.

§ 2.2.2 Устно или письменно

И тот, и другой вариант уместен, но у обоих есть ограничения.

Основной плюс устного делегирования — это быстрее. Годится только для небольших, ясных и привычных заданий. Для команд, которые все понимают одинаково. Для сложных, непривычных заданий есть минусы:

Сложно учесть все детали при постановке. Кто мало думал, тот много плакал.

Подчиненному сложно запомнить множество деталей.

Может аукнуться временем на переделку и повторным делегированием.

Не оставляет артефактов. Появляется искушение при разборе полетов переиграть постановку («а я тебе сказал так-то», «а я тебе этого не говорил…»). Очень хреновая практика, разлагает рабочую атмосферу. Да и в эту игру могут играть оба.

Чисто-письменное делегирование дает время обдумать детали. В итоге получается точнее. А размышления о предстоящих деталях минимизирует количество ошибок. Минусы:

Требует планирования времени на делегирование.

У подчиненного нет возможности уточнить задание.

У вас нет возможности предварительно убедиться, что вас поняли правильно. Пропущен предварительный контроль.

Лучше работают гибридные варианты

Текст + обсудить. Для сложных заданий, с чек-листами, условиями, пунктами и подпунктами — сначала пишем текст, потом даем прочитать и обсуждаем устно вопросы. Идеально для постановки задач программистам.

Если деталей в задаче слишком много — лучше разбить такие задания на несколько. Проще пропустить один пункт из 30, чем 1 пункт из 5.

Совет для прокачки стиля письменных постановок

Выработайте ясный, четкий стиль. Помогает книжка Ильяхова «Пиши-сокращай». Можете даже первое время для тренировки прогонять постановки через сервис glvrd.ru — дает оценку качества стиля. Пока не почувствуете, что справляетесь без него. Постановки длиннее 3−4 предложений навевают тоску. Не стоит писать длинные инструкции из-за паранойи и личных страхов.

Устно + проверка фиксации. Дать устное распоряжение или даже провести брейншторм, обсудить вопросы, спросить план действий и проверить, как задание было зафиксировано. Тут работает «эффект генерации» — мы лучше запоминаем то, что изложили сами. Можно зафиксировать итоги и ключевые точки самому, но это не так эффективно. Большинству клиентов удобно давать постановки в таком виде. Хорошо работает с дизайнерами, да и впринципе хороший способ.

§ 2.2.3 Список «Поручил-контролирую» и сроки о сроках

Что такое делегирование python. Смотреть фото Что такое делегирование python. Смотреть картинку Что такое делегирование python. Картинка про Что такое делегирование python. Фото Что такое делегирование python

При устном делегировании вам нужно будет каким-то образом вспомнить о своем задании и своевременно его проверить. Я держу в личном таск-трекере список «поручил-контролирую», где кратко, по людям, записано, кто и что обещал и когда (или когда будет контрольная точка).

Что такое делегирование python. Смотреть фото Что такое делегирование python. Смотреть картинку Что такое делегирование python. Картинка про Что такое делегирование python. Фото Что такое делегирование python

Подобную же технику можно организовать в бумажном планировании — стопка стикеров, каждый из которых разбит на 4 сектора: что, кто, когда и отметка «сделал». В том смысле, что сделал вовремя и как обещал. Раз в неделю отработанные стикеры выбрасываются. Или можно накопить статистику по людям — кто подводит вас чаще всего, а кто — четкий.

При этом я понимаю, что в режиме «здесь и сейчас» не всегда получится спрогнозировать срок выполнения задания. Но всегда есть возможность спрогнозировать срок получения срока. С этим списком проходят планерки. Ребята знают, что я вряд ли что-то забуду. Повышает качество фиксации заданий с их стороны.

Кроме того, мне нужно время на проверку задания. Поэтому, если договорились сделать задачу «сегодня», то по умолчанию я ожидаю ее до 17:00 (а не в 23:59).

Рекомендую завести себе такой список, задавать вопрос про сроки о сроках, а также определиться, что значит «будет готово сегодня».

§ 2.2.4 Где делегировать, а где — нет. Туалетное делегирование

Туалетное делегирование — это когда сотрудника в неформальной обстановке (в курилке, туалете, на кухне или прогулке с собакой после работы) коллеги нагружают задачами. Задачами правильными, нужными. Но когда человек к этому морально не готов и сконцентрирован на том, чтобы НЕ работать. Из-за этого он может забыть даже факт того, что его о чём-то просили. И ещё виноватым останется. Коллеги же, которые задачу выдали, чувствуют, что свой долг выполнили.

Что такое делегирование python. Смотреть фото Что такое делегирование python. Смотреть картинку Что такое делегирование python. Картинка про Что такое делегирование python. Фото Что такое делегирование python

Таким образом, у туалетного делегирования три признака:

Неформально

Задача выдаётся в неформальной обстановке. Курилка. Кухня. Коридор. Любое нерабочее пространство.

Конкретно

Задача выдаётся по адресу и корректно. Если не исполнили — понятно кто не исполнил. И понятно, что именно.

Безвозвратно

Поставивший задачу сотрудник считает, что выполнил свою миссию и повторять в рабочем пространстве уже не будет.

Туалетное делегирование встречается в любых коллективах, от Газпрома до семьи (мама попросила помыть посуду, когда сын был в разгаре онлайн-боя — как же это запомнить?) И всегда заканчивается обидами и расшатыванием авторитета озадаченного.

Так что практиковать такое делегирование — дело тухлое. Часть задач постоянно будет теряться. Уважение к человеку, которого задачами нагружают, тоже. Поэтому если у себя в компании вы заметили, что подчинённые делятся задачами в нерабочее время или в нерабочем месте, боритесь с этим.

Туалетное делегирование — очень тонкая вещь. Подчиненный может подойти с ВОПРОСОМ (дескать, как мне быть с компанией А) — руководитель отмахнется фразой «надо подумать». И тут подчиненный получит моральное право считать, что ситуацию с компанией А теперь разруливает его руководитель. Итог: через пару дней подчиненный с чистой совестью подойдёт и спросит «Глебываныч, как там с моим ВОПРОСОМ дела?» Спасибо, что не «Как там с моим ПОРУЧЕНИЕМ дела». Это самозахват полномочий. За такое надо бить, и бить — жёстко!

В отличие от пересаживания обезьян, туалетное делегирование работает в две стороны. Делегировать можно не только руководителю, но и сам начальник может бросить мимоходом «У меня идея! Круто бы было, чтобы у нас на проекте была такая-то фича!» Подчиненный кивнет, скажет «Да, реально прикольно». Итог: начальник считает, что задача поставлена. Подчиненный — что просто поговорили. Через некоторое время обоих ждет большой облом.

Пересаживание обезьян — когда подчиненные свешивают своих обезьян свои проблемы на своего босса, а тот покорно их принимает, потому что «без вас никак не разобраться», или «вам нужно подписать», или «давайте подумаем, что можно сделать».

с.м. Одноминутный менеджер и обезьяны
Бланшар К., Онке-мл. У., Берроуз Х.

Решение

Избегайте делегирования в нерабочих местах. Иначе подчиненный не сможет зафиксировать постановку и взять на себя обязанность. Лучше всего подходят запланированные встречи, один на один (например, регулярные планерки раз в неделю-две или стендапы). Да, вы имеете право дёрнуть подчиненного в любой момент, но это непрофессионально и говорит о вашем слабом планировании. А подчиненного выбивает из потока — о работе в потоке подробнее поговорим в главе 3. Важно оставлять время на разбор вопросов и задавать конкретные контрольные вопросы о деталях. Так вы поймете, что подчиненный всё правильно понял и составил адекватный план действий. Следите, не пытаются ли делегировать на бегу вам. Введите термин «туалетное делегирование» и пресекайте это явление.

Дополнение к материалу: как отбиться от туалетного делегирования. Видео

Этот материал — черновик книги по управлению digital-проектами. Автор заранее приносит извинения за возможные неточности. Любая конструктивная обратная связь приветствуется. Продолжение следует.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *