Вместо того, чтобы использовать какое-то исключение для обработки только двух случаев, аргумент родительского класса в конструкторе типов (т. Е. Оператор class
) допускает расширение аргумента списка в Python 3. Так, что вы могли бы сделать дляНапример:
parent_classes = [MainParent]
# it is also possible to make use of `importlib` to go through a
# list of possible imports rather than doing this one-by-one in
# this verbose manner
try:
from might_be_missing import SomeOtherClass
except ImportError:
pass # perhaps log a warning of some kind
else:
parent_classes.append(SomeOtherClass)
# To create the class
class YourClass(*parent_classes):
"""
The main class definition
"""
Однако этот конкретный шаблон обычно не является полезным шаблоном для конечных пользователей этого класса, поскольку он не обеспечивает стабильного поведения, которое пользователи могут легко вывести, учитывая, чтоэто застряло за системой, которую они не обязательно могут контролировать.Более полезной техникой наследования классов может быть композиция класса для проблемы , которую вы, возможно, действительно решаете .
Пожалуйста, также см .: Python: Наследование против композиции