2015-06-30 9 views
0

Я ищу хорошее решение, чтобы избежать дублирования кода, мой код выглядит следующим образом;Избегайте дублирования кода с наследованием класса python

class HostEnvironment(AbstractEnvironment): 

    def provision(self, wait_for_sshd=True): 

     some code 

    def __init__(self, layer_info): 

     pass 

class VCBEnvironment(HostEnvironment): 

    def provision(self, wait_for_sshd=True): 

     same code 

     plus some more code 

    def __init__(self, layer_info): 
     super(VCBEnvironment, self).__init__(layer_info) 
+1

Вы * уже * с помощью 'супер()' в '__init__' метода. Почему вы не можете использовать это вместо 'того же кода' в' VCBEnvironment.provision() 'точно? –

+0

@MartijnPieters: Возможно, он не знает, что 'super' может использоваться для методов, кроме метода' __init__'. –

ответ

1

E.g. как это:

class AbstractEnvironment: 
    pass 

class HostEnvironment (AbstractEnvironment): 
    def __init__ (self, layer_info): 
     pass 

    def provision (self, wait_for_sshd = True): 
     print 'some code' 

class VCBEnvironment (HostEnvironment): 
    def __init__(self, layer_info): 
     HostEnvironment.__init__ (self, layer_info) 

    def provision (self, wait_for_sshd = True): 
     HostEnvironment.provision (self, wait_for_sshd) 
     print 'some more code' 

print '\ne1' 
e1 = HostEnvironment (None) 
e1.provision() 

print '\ne2' 
e2 = VCBEnvironment (None) 
e2.provision() 

Выход:

e1 
some code 

e2 
some code 
some more code 
Смежные вопросы