Абстрактные атрибуты в Python - PullRequest
45 голосов
/ 29 апреля 2010

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

abstract class Controller {

    val path: String

}

Подкласс Controller применяется для определения «пути» компилятором Scala. Подкласс будет выглядеть так:

class MyController extends Controller {

    override val path = "/home"

}

Ответы [ 11 ]

0 голосов
/ 29 апреля 2010

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

т.е.

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

class MyController(_Controller):
    path = '/Home'
...