Я предполагаю, что у вас есть родительский класс для всех этих или, по крайней мере, для микширования. Поместите функцию возврата по умолчанию в родительский или 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...
Не делайте этого. Это ужасный способ реализации полиморфизма. –