Я предполагаю, что у вас есть родительский класс для всех этих или, по крайней мере, миксин. Поместите функцию возврата по умолчанию в parent или mixin, а затем переопределите ее в тех, которые отличаются ... Это единственный правильный способ сделать это.
Конечно, он создает дополнительный код, но, по крайней мере, он инкапсулирован и масштабируем. Скажем, вы хотите добавить поддержку еще пяти классов. Вместо того, чтобы изменять этот код, просто добавьте правильный код в новые классы. Судя по всему, это две строки на класс (определение функции и возвращаемая строка). Это не плохо, правда?
Если obj
не является классом, содержащим функцию возврата, то возникает исключение, которое вы можете поймать и игнорировать с чистой совестью.
class MyMixin:
def my_return(self, *args):
return self.name
... possibly other things...
class SomeClass(MyMixin):
... no alteration to the default ...
class AnotherClass(MyParent, MyMixin):
def my_return(self, *args):
return args[0].normalize(self.identifier)
... blabla
# now, this is in the caller object...
try:
rval = obj.my_return(self) # this is the caller object 'self', not the 'self' in the 'obj'
#dosomething with rval
except Exception:
pass #no rval for this object type, skipping it...