У меня определены следующие классы:
class First(object):
def __init__(self):
print("first")
def mF1(self):
print "first 1"
def mF2(self):
print "first 2"
class Second(object):
def __init__(self):
print("second")
def mS1(self):
print "second 1"
class Third(object):
def __init__(self):
print("third")
def mT1(self):
print "third 1"
def mT2(self):
print "third 2"
def mT3(self):
print "third 3"
class Fourth(First, Second, Third):
def __init__(self):
super(Fourth, self).__init__()
print("fourth")
C = Fourth()
C.mF1()
C.mF2()
C.mS1()
C.mT1()
C.mT2()
C.mT3()
, который дает вывод:
first
fourth
first 1
first 2
second 1
third 1
third 2
third 3
При этом, довольно ясно, что все атрибуты и методы классов First
, Second
, Third
и Fourth
доступны в классе Fourth
.Теперь я хотел бы, чтобы класс Fourth
выборочно наследовал от родителей на основе контекста - то есть от одного First
или от First
и Third
и т. Д. Один из способов - определить отдельные классы следующим образом:
class Fourth1(First):
def __init__(self):
super(Fourth, self).__init__()
print("fourth first")
class Fourth2(First, Third):
def __init__(self):
super(Fourth, self).__init__()
print("fourth first third")
что означает определение отдельных классов и использование отдельных имен классов вместо одного.
Я хочу знать, существует ли более простой, динамичный и "питонический" способ достижения этого?Можно ли выбрать, где наследовать (точно так же, как super()
, наследовать все атрибуты и методы, включая закрытые методы) простым способом, например, сказать,
C = Fourth(1,0,0)
, чтобы наследовать от First
и
C = Fourth(1,0,1)
для наследования от First
и Third
?