Подтвердить что ты не робот

Как предотвратить переопределение функции в python

Есть ли способ сделать функцию класса неуязвимой? что-то вроде ключевого слова java final. т.е. любой переопределяющий класс не может переопределить этот метод.

4b9b3361

Ответ 1

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

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

Если вы действительно этого хотите, вы можете попробовать код, размещенный здесь. Но, как вы видите, есть много кода, чтобы заставить его делать то, что вы хотите. Также следует отметить, что даже человек, который разместил код, говорит, что он может быть передан с помощью __dict__ или object.__setattr__.

Ответ 2

Здесь вы можете добавить комментарий:

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

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

Ответ 3

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

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

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