美文网首页
习题 44 继承与合成

习题 44 继承与合成

作者: 南北东西总相随 | 来源:发表于2017-10-14 21:34 被阅读0次

习题 44 继承与合成

隐式继承

class Parent(object):
    def implicit(self):
        print "PARENT implicit()"

class Child(Parent):
    pass

dad = Parent()
son = Child()

dad.implicit()
son.implicit()

结果:

PARENT implicit()
PARENT implicit()

显式覆盖

class Parent(object):
    def override(self):
        print "PARENT override()"

class Child(Parent):
    def override(self):
        print "CHILD override()"

dad = Parent()
son = Child()

dad.override()
son.override()

结果:

PARENT override()
CHILD override()

在运行前或运行后替换

class Parent(object):
    def altered(self):
        print "PARENT altered()"

class Child(Parent):
    def altered(self):
        print "CHILD, BEFORE PARENT altered()"
        super(Child, self).altered() # 调用父类方法
        print "CHILD, AFTER PARENT altered()"

dad = Parent()
son = Child()

dad.altered()
son.altered()

结果:

PARENT altered()
CHILD, BEFORE PARENT altered()
PARENT altered()
CHILD, AFTER PARENT altered()

三种方式组合使用

class Parent(object):
    def override(self):
        print "PARENT override()"

    def implicit(self):
        print "PARENT implicit()"

    def altered(self):
        print "PARENT altered()"

class Child(Parent):
    def override(self):
        print "CHILD override()"

    def altered(self):
        print "CHILD, BEFORE PARENT altered()"
        super(Child, self).altered()
        print "CHILD, AFTER PARENT altered()"

dad = Parent()
son = Child()

print "*** IMPLICIT ***"
dad.implicit()
son.implicit()

print "*** OVERRIDE ***"
dad.override()
son.override()

print "*** ALTERED ***"
dad.altered()
son.altered()

结果:

*** IMPLICIT ***
PARENT implicit()
PARENT implicit()
*** OVERRIDE ***
PARENT override()
CHILD override()
*** ALTERED ***
PARENT altered()
CHILD, BEFORE PARENT altered()
PARENT altered()
CHILD, AFTER PARENT altered()

super()__init__搭配使用

class Child(Parent):
    def __init__(self, stuff):
        self.stuff = stuff
        super(Child, self).__init__() # 调用父类的初始化方法

合成

class Other(object):
    def override(self):
        print "OTHER override()"

    def implicit(self):
        print "OTHER implicit()"

    def altered(self):
        print "OTHER altered()"

class Child(object):
    def __init__(self):
        self.other = Other()

    def override(self):
        print "CHILD override()"

    def implicit(self):
        self.other.implicit()

    def altered(self):
        print "CHILD, BEFORE OTHER altered()"
        self.other.altered()
        print "CHILD, AFTER OTHER altered()"

son = Child()

son.implicit()
son.override()
son.altered()

结果:

OTHER implicit()
CHILD override()
CHILD, BEFORE OTHER altered()
OTHER altered()
CHILD, AFTER OTHER altered()

相关文章

  • 习题 44 继承与合成

    习题 44 继承与合成 隐式继承 结果: 显式覆盖 结果: 在运行前或运行后替换 结果: 三种方式组合使用 结果:...

  • 【Python爬虫】-笨办法学 Python 习题42-45

    习题43: 习题44:

  • 小船渡河问题

    今天在文科班复习到运动的合成与分解,看到小船渡河的习题,自然就以它为例子讲解合成与分解知识,也顺便把小船渡河问题复...

  • 【习题44】

    【程序44】题目:一个偶数总能表示为两个素数之和。

  • java 学习笔记(3)-继承

    合成与继承的区别 合成就是在一个类中,用一个句柄使用另一个类的方法。继承就是继承了一个类的方法后,再添加新的,或者...

  • 7 合成复用原则

    合成复用原则 思想:尽量使用合成/聚合的方式,而不是使用继承

  • 第22章 手机软件合适统一--桥接模式

    合成/聚合复用原则 合成/聚合复用原则(CARP),尽量使用合成/聚合,尽量不要使用类继承。[J&DP] 聚合表示...

  • 桥接模式C++

    合成/聚合复用原则 合成/聚合复用原则(CARP):尽量使用合成/聚合,尽量不用使用类继承(这是一种强耦合)。优先...

  • Swift-合成复用原则

    合成复用原则的核心为在设计类的复用时,要尽量先使用组合或者聚合的方式进行设计,尽量少的使用继承。合成复用原则与里式...

  • Java继承

    继承与合成基本概念 继承:可以基于已经存在的类构造一个新类。继承已经存在的类就可以复用这些类的方法和域。在此基础上...

网友评论

      本文标题:习题 44 继承与合成

      本文链接:https://www.haomeiwen.com/subject/zbifuxtx.html