Что такое делегирование 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-проектами. Ссылки на предыдущие части — в конце материала.

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

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

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

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

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

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

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

Что нельзя

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Что такое патриотическое воспитание дошкольников

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

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

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

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

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

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

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

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

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

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

Неформально

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

Конкретно

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

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

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

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

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

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

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

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

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

Решение

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

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

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

Источник

Информационный сайт