__
имена с префиксом обрабатываются специально при создании класса. Имя заменяется, когда функция определена искаженным именем, как если бы вы сначала определили функцию как
@classmethod
def test_function(cls, message):
cls._A__get_the_function()
.
Это сделано, чтобы явно предоставить способ скрыть имя от подкласса. Поскольку вы хотите переопределить имя, __get_the_function
не подходит; используйте обычное _
префиксное имя, если вы хотите пометить его как личное:
class A:
@classmethod
def test_function(cls, message):
cls._get_the_function()
# Define *something*, since test_function assumes it
# will exist. It doesn't have to *do* anything, though,
# until you override it.
@classmethod
def _get_the_function(cls):
pass