Как препятствовать тому, чтобы функция была переопределена в Python [дубликат]

Этот вопрос уже имеет ответ здесь:

Существует ли способ сделать функцию класса unoverriddable? что-то как Java final ключевое слово. т.е., любой переопределяющий класс не может переопределить тот метод.

31
задан olamundo 11 March 2010 в 14:24
поделиться

3 ответа

Проблема в том, что вы пытаетесь писать на Python, используя философию Java. Некоторые вещи переносятся, но не все. В Python вы можете делать следующее, и это прекрасно, но полностью противоречит тому, как Java думает об объектах.

class Thing(object):
    x = 1
something = Thing()
something.y = something.x

Если вы действительно этого хотите, вы можете попробовать код , размещенный здесь . Но, как видите, там много кода, чтобы заставить его делать то, что вы хотите. Также следует отметить, что даже человек, разместивший код, говорит, что его можно передать, используя объект __ dict __ или .__ setattr __ .

39
ответ дан 27 November 2019 в 21:23
поделиться

Да, есть, не делайте этого.

Я должен добавить к этому после голосования против. Некоторые считают, что такие механизмы защиты идут вразрез с идеей Python, что «мы все здесь взрослые по согласию». От кого вы хотите защитить такие функции? А если одного комментария недостаточно, зачем нужно что-то «посильнее»?

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

0
ответ дан 27 November 2019 в 21:23
поделиться

Вы можете добавить комментарий о следующем:

# We'll fire you if you override this method.

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

95
ответ дан 27 November 2019 в 21:23
поделиться
Другие вопросы по тегам:

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