Есть ли в Python общее наследование? - PullRequest
2 голосов
/ 11 июня 2011

Мне было интересно, есть ли общее наследование в Python.

Например,

Class A(object):
  def foo():

Class B(object):
  def foo():


Class C(<someParentClass>):
  def bar():

так эффективно, я хотел бы сделать что-то вроде

  myClass1 = C()<A>
  myClass2 = C()<B>

Я предполагаю, что это невозможно в python, но есть ли другой способ получить подобный эффект?

Ответы [ 2 ]

9 голосов
/ 11 июня 2011

Ничто не мешает этому.Все в Python является по сути общим.Все время выполнения, включая операторы классов, поэтому вы можете сделать что-то вроде:

def make_C(parent):
    class C(parent):
        def bar(self):
            ...
    return C

myClass1 = make_C(A)
myClass2 = make_C(B)

Если вы хотите, чтобы класс C был немного более описательным в имени или документации, вы можете назначить __name__ и __doc__ атрибутов или используйте форму с тремя аргументами type() вместо оператора class для его создания.

2 голосов
/ 11 июня 2011

Вы можете получить C из object и использовать

class MyClass1(A, C):
    pass
class MyClass2(B, C):
    pass

Существует много способов достижения точного эффекта, который вы описали, но я думаю, что определение C как смешанного класса - этосамый идиоматический подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...