Абстрактные атрибуты в Python

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

abstract class Controller {

    val path: String

}

Подкласс Controller осуществляется для определения "пути" компилятором Scala. Подкласс был бы похож на это:

class MyController extends Controller {

    override val path = "/home"

}
58
задан deamon 29 April 2010 в 09:47
поделиться

3 ответа

Python имеет встроенное исключение для этого, хотя вы не встретите исключение до времени выполнения.

class Base(object):
    @property
    def path(self):
        raise NotImplementedError


class SubClass(Base):
    path = 'blah'
62
ответ дан 24 November 2019 в 18:41
поделиться

В ответе Бастьена Леонара упоминается модуль абстрактного базового класса, а в ответе Брендана Абеля речь идет о нереализованных атрибутах, вызывающих ошибки. Чтобы гарантировать, что класс не реализован вне модуля, вы можете префикс базового имени с подчеркиванием, которое обозначает его как частный для модуля (т.е. он не импортируется).

т.е.

class _Controller(object):
    path = '' # There are better ways to declare attributes - see other answers

class MyController(_Controller):
    path = '/Home'
0
ответ дан 24 November 2019 в 18:41
поделиться

Взгляните на модуль abc (Abtract Base Class): http://docs.python.org/library/abc.html

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

2
ответ дан 24 November 2019 в 18:41
поделиться
Другие вопросы по тегам:

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