【问题标题】:Avoid code duplication with class inheritance python使用类继承python避免代码重复
【发布时间】:2015-06-30 07:42:07
【问题描述】:

我正在寻找一个很好的解决方案来避免代码重复,我的代码如下所示;

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)

【问题讨论】:

  • 已经__init__ 方法中使用super()。为什么不能在VCBEnvironment.provision() 中使用它而不是same code
  • @MartijnPieters:他可能不知道super可以用于__init__方法之外的方法。

标签: python python-2.7 object code-duplication


【解决方案1】:

例如像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多