python - 类的继承

什么是继承

继承是一种创建类的方法,一个类可以继承一个或多个父类,原始类称为基类或超类。
继承可以很方便的帮助子类拥有父类的属性和方法,减少代码冗余,子类可以定义自己的方法和属性,也可以覆盖父类的方法和属性。

实现继承

  • 创建一个父类Animal,在父类中定义方法或属性:
class Animal():
    def __init__(self, kind, age):
        self.kind = kind
        self.age = age
        print("这是父类的__init__方法")
    def info(self):
        print('这是一只' + self.kind, ',今年' + self.age + '岁了')

animal = Animal('狗', '5')
animal.info()

# 这是父类的__init__方法
# 这是一只狗 ,今年5岁了
  • 然后创建一个子类,继承上面的Animal父类,同时会继承父类的属性和方法:
class Cat(Animal):
    pass # 不想向类中添加任何其他的属性或者方法,可以使用关键字pass

cat = Cat('猫','3')
cat.info()

# 这是父类的__init__方法
# 这是一只猫 ,今年3岁了
  • 当子类继承了父类的__init__()方法后,会在创建对象时自动调用。
    你可以在子类中重新创建一个__init__()方法,这样既可以继承父类的属性,又可以给这个子类添加新的属性:
class Cat(Animal):
    def __init__(self, kind, age, name):
        self.kind = kind
        self.age = age
        self.name = name
        print("这是子类的__init__方法")
    def info(self):  # 如果在子类中添加一个父类同名的方法,会覆盖父类的方法
        print('这是一只' + self.kind, ',今年' + self.age + '岁了', '它的名字是'+self.name)

cat = Cat('猫, '3', 'xixi')
cat.info()

# 这是子类的__init__方法
# 这是一只猫,今年3岁了 它的名字是xixi

如上所示,在子类中添加了一个info()方法,这是一个和父类中的方法同名的方法,会覆盖父类原有的方法。当你需要子类中用特殊或不同的功能时就可以这样做。

多继承

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    ...
    <statement-N>

需要注意圆括号中基类(父类)的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

class Parent(object):
    def info(self):
        print('This is Parent')
    def show(self):
        print("show time")


class A(Parent):  # 继承Parent
    def info(self):  # 自动覆盖父类的此方法
        print('This is A')


class B(Parent):  # 继承Parent
    def info(self):
        print('This is B')


class C(A, B):  # 继承A,B
    pass

  • 如下所示,创建A类的实例对象后,调用info()方法,输出的是This is A,因为A类自身的info方法会覆盖父类Parent中的info方法。
    而用实例对象调用show()方法调用的是父类Parent中的方法,因为A类中没有这个方法,所以会去父类中查找。
a = A()
a.info()  
# 输出:This is A

a.show()  
# 输出:show time
  • 类B和类A的情况是相似的:
b = B()
b.info()  
# 输出:This is B

a.show()  
# 输出:show time
  • 而下面的代码中因为C类继承了两个父类,所以创建C的实例对象去调用info()方法时,需要注意一下这个info()方法是哪个父类中的方法。只要记住查找的顺序是从左至右就可以了,所以最终调用的是父类A中的info()方法。
c = C()
c.info()  
# 输出: This is A

参考:https://www.9xkd.com/course/1039962250.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 什么是继承 新类不必从头编写 新类从现有的类继承,就自动拥有了现有类的所有功能 新类只需要编写现有类缺少的新功能 ...
    Dozing阅读 805评论 0 0
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,640评论 2 9
  • 继承 在面向对象编程中类的继承是一个需要掌握的要点。当我们定义一个类时可以继承自一个已经定义好的类,新的类成为子类...
    keinYe阅读 1,111评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,034评论 1 32
  • 2018年“十一”国庆节假期即将结束。这个小长假是感觉上,时间过得最慢的一个假期,而且很悠闲。感觉时间比以往小长假...
    大树_8e1b阅读 303评论 1 0