Что такое делегирование 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-проектами. Автор заранее приносит извинения за возможные неточности. Любая конструктивная обратная связь приветствуется. Продолжение следует.