Множественное наследование без определения классаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Множественное наследование без определения класса

Сообщение Anonymous »

Я не уверен, что это возможно, и мне интересно, подойдет ли это или существует лучший способ сделать это.
Я создам игрушечный пример, чтобы показать то, что я ищу.
Предположим, у меня есть люди разных национальностей. Я создаю класс для каждой национальности, и во всех этих классах есть метод приветствия.

Код: Выделить всё

class French:
def greeting(self):
print("Bonjour")

class English:
def greeting(self):
print("Hello")

class Spanish:
def greeting(self):
print("Hola")
Конечно, это можно сделать, используя один класс Person и используя условные выражения внутри метода Greeting, но мы можем представить, что функция Greeting будет более сложной, чем это, и оправдывает наличие класса для каждой национальности. .
Можно также представить, что все эти Nationalities на самом деле являются дочерним классом класса Person и переопределяют метод Greeting для вывода своего собственного языка.
Теперь представьте себе еще одну функцию, например «Спорт», с помощью которой я также создаю разные классы для разных видов спорта.

Код: Выделить всё

class Football:
def sport(self):
print("Football")

class Tennis:
def sport(self):
print("Tennis")

class Golf:
def sport(self):
print("Golf")
Опять же, вместо одного класса Sport представьте, что функция sport более сложна, и оправданы разные классы. Или мы можем представить, что все эти классы являются дочерними элементами общего класса Sport и переопределяют метод sport.
Теперь мне нужен класс, который наследуется как от Nationality, так и от Sport. Этот класс не будет добавлять новые методы или атрибуты, он просто наследуется от двух классов, поэтому у него есть собственное приветствие и вид спорта.
Я могу создать класс FrenchFootball, наследующий как от French, так и от Football. .

Код: Выделить всё

class FrenchFootball(French, Football):
pass
Теперь я могу создать экземпляр этого класса, и у него будет как метод приветствия, так и метод sport

Код: Выделить всё

foo = FrenchFootball()
foo.greeting()   # Bonjour
foo.sport()      # Football
Теперь вопрос:
Дочернему классу не нужно добавлять какие-либо атрибуты или методы, он просто связывает национальность с Sport, поэтому полученный экземпляр говорит Bonjour и любит футбол.
Однако, чтобы создать такой экземпляр, мне нужно определить класс FrenchFootball, который просто наследует оба класса.Если мне нужны все комбинации из этого игрушечного примера, мне нужно определить 9 дочерних классов, чтобы я мог создать их экземпляры по их имени.
Вопрос:
Есть ли способ создать экземпляр foo для английского тенниса без необходимости кодирования класса EnglishTennis?
Вы можете себе представить, что наличие 10 видов спорта и 20 национальностей позволяет создать классы дочерних ссылок - кошмар.
Мне бы хотелось что-то вроде (псевдокода)

Код: Выделить всё

foo = new Class(English, Tennis)
По сути, это говорит Python: мне нужен экземпляр пустого класса, который наследует английский и теннис, но на самом деле у меня нет кода класса EnglishTennis. Я определяю наследование при создании экземпляра класса.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-a-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»