Что такое хороший способ реализовать что-то похожее на интерфейс в Python?
Каков хороший способ реализовать что-то похожее на интерфейс Delphi / C # или абстрактный класс в Python? Класс, который заставит все его подклассы реализовать определенный набор методов?
- Как избежать замораживания GUI при связывании скрипта muliprocessing python, связанного с gui (скрипт python должен работать в фоновом режиме)
- «Иногда», получая InterfaceError на PostgreSQL с Peewee ORM
- Как проверить статус или убить внешний процесс с помощью python
- Настроить тип параметра функции в Python?
- Какие библиотеки C ++ следует использовать для большого параллельного вычисляющего число-хрустального проекта, использующего сторонние приложения
Самый простой способ сделать это – использовать абстрактную реализацию базового класса, которая была включена в Python с версии 2.7.
Это позволяет вам классифицировать базовый класс как абстрактный с помощью метакласса abc.ABCMeta
. Затем вы можете пометить методы и свойства как абстрактные. Когда вы создаете экземпляр класса с метаклассом ABCMeta
(или любым из его подклассов), будет ABCMeta
исключение, если какие-либо абстрактные свойства или методы остаются неопределенными в экземпляре.
например
>>> from abc import ABCMeta, abstractmethod >>> class Foo(object): __metaclass__ = ABCMeta @abstractmethod def bar(self): pass >>> class BadFoo(Foo): pass >>> BadFoo() Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> BadFoo() TypeError: Can't instantiate abstract class BadFoo with abstract methods bar >>> class GoodFoo(Foo): def bar(self): return 42 >>> GoodFoo() <__main__.GoodFoo object at 0x027354B0> >>>
Проверка выполняется только тогда, когда класс создается, потому что совершенно законно иметь подкласс, который реализует только некоторые абстрактные методы и поэтому сам является абстрактным классом.
- Пользовательский пакет Python не будет правильно установлен через Pip In VirtualEnv
- Маленькая зеленая кнопка «+» больше не отображается в администраторе Django
- python: urllib2 с использованием другого сетевого интерфейса
- есть ли инструмент для автоматического создания интерфейса с помощью swig?
- Почему pylint продолжает говорить, что мой класс R0923 – «интерфейс не реализован»
- Как документировать и тестировать интерфейсы, необходимые для формальных параметров в Python 2?
- Поиск приложения GUI для ввода команд Linux
- Как подклассы str в Python
- Создайте openCV VideoCapture из имени интерфейса вместо номеров камер
- Взаимодействие с кривой на графике Matplotlib
- Как установить aggdraw после этой ошибки?