Я создам игрушечный пример, чтобы показать то, что я ищу.
Предположим, у меня есть люди разных национальностей. Я создаю класс для каждой национальности, и во всех этих классах есть метод приветствия.
Код: Выделить всё
class French:
def greeting(self):
print("Bonjour")
class English:
def greeting(self):
print("Hello")
class Spanish:
def greeting(self):
print("Hola")
Можно также представить, что все эти Nationalities на самом деле являются дочерним классом класса Person и переопределяют метод Greeting для вывода своего собственного языка.
Теперь представьте себе еще одну функцию, например «Спорт», с помощью которой я также создаю разные классы для разных видов спорта.
Код: Выделить всё
class Football:
def sport(self):
print("Football")
class Tennis:
def sport(self):
print("Tennis")
class Golf:
def sport(self):
print("Golf")
Теперь мне нужен класс, который наследуется как от Nationality, так и от Sport. Этот класс не будет добавлять новые методы или атрибуты, он просто наследуется от двух классов, поэтому у него есть собственное приветствие и вид спорта.
Я могу создать класс FrenchFootball, наследующий как от French, так и от Football. .
Код: Выделить всё
class FrenchFootball(French, Football):
pass
Код: Выделить всё
foo = FrenchFootball()
foo.greeting() # Bonjour
foo.sport() # Football
Дочернему классу не нужно добавлять какие-либо атрибуты или методы, он просто связывает национальность с Sport, поэтому полученный экземпляр говорит Bonjour и любит футбол.
Однако, чтобы создать такой экземпляр, мне нужно определить класс FrenchFootball, который просто наследует оба класса.Если мне нужны все комбинации из этого игрушечного примера, мне нужно определить 9 дочерних классов, чтобы я мог создать их экземпляры по их имени.
Вопрос:
Есть ли способ создать экземпляр foo для английского тенниса без необходимости кодирования класса EnglishTennis?
Вы можете себе представить, что наличие 10 видов спорта и 20 национальностей позволяет создать классы дочерних ссылок - кошмар.
Мне бы хотелось что-то вроде (псевдокода)
Код: Выделить всё
foo = new Class(English, Tennis)
Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-a-class