python-面向对象——继承

继承

#encoding:utf-8
class Animal:
    def eat(self):
        print("吃吃吃")
    def drink(self):
        print("喝喝喝")
    def sleep(self):
        print("睡觉")
    def run(self):
        print("跑")

class Dog(Animal):
    def bark(self):
        print("汪汪汪")
class Cat(Animal):
    def catch(self):
        print("捉老鼠")

wangcai = Dog()
wangcai.eat()
wangcai.bark()
mimi = Cat()
mimi.run()
mimi.catch()
运行结果:
吃吃吃
汪汪汪
跑
捉老鼠

可以多层继承,子类可以直接调用父类的父类的函数

class Animal:
    def eat(self):
        print("吃吃吃")
    def drink(self):
        print("喝喝喝")
    def sleep(self):
        print("睡觉")
    def run(self):
        print("跑")

class Dog(Animal):
    def bark(self):
        print("汪汪汪")
class xiaotq(Dog):
    def fly(self):
        print("-------飞-----")
xiaotq = xiaotq()
xiaotq.fly()
xiaotq.eat()
xiaotq.bark()
重写
#encoding:utf-8
class Animal:
    def eat(self):
        print("吃吃吃")
    def drink(self):
        print("喝喝喝")
    def sleep(self):
        print("睡觉")
    def run(self):
        print("跑")

class Dog(Animal):
    def bark(self):
        print("汪汪汪")

class xiaotq(Dog):
    def fly(self):
        print("-------飞-----")
#方法的重写,名字必须与父类一样
    def bark(self):
        print("++=狂叫+++")

xiaotq = xiaotq()
xiaotq.fly()
xiaotq.eat()
xiaotq.bark()
运行结果:
-------飞-----
吃吃吃
++=狂叫+++

调用被重写的方法:

#encoding:utf-8
class Animal:
    def eat(self):
        print("吃吃吃")
    def drink(self):
        print("喝喝喝")
    def sleep(self):
        print("睡觉")
    def run(self):
        print("跑")

class Dog(Animal):
    def bark(self):
        print("汪汪汪")
class xiaotq(Dog):
    def fly(self):
        print("-------飞-----")
    def bark(self):
        print("++++狂叫+++")
#调用被重写的父类的方法:
        Dog.bark(self) #方法一
        super().bark() #方法二
    
xiaotq = xiaotq()
xiaotq.fly()
xiaotq.eat()
xiaotq.bark()
多继承

python支持多继承

class Base(object):
    def test(self):
        print("======Base====")
class A(Base):
    def test1(self):
        print("test1--------")
class B(Base):
    def test2(self):
        print("test2=======")
class C(A,B):
    pass
c = C()
c.test1()
c.test2()
c.test()
运行结果:
test1--------
test2=======
======Base====
class Base(object):
    def test(self):
        print("======Base====")
class A(Base):
    def test(self):
        print("test1--------")
class B(Base):
    def test(self):
        print("test2=======")
class C(A,B):
    def test(self):
        print("cccccccccc=======")
c = C()
c.test()
print(C.__mro__)  #调用方法时的搜索顺序,如果在某个类中找到了方法,就停止搜索
运行结果:
cccccccccc=======
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.Base'>, <class 'object'>)

所以,设计类时,要尽量避免出现相同的类名

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 4,925评论 0 2
  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 4,030评论 0 1
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 5,851评论 0 10
  • 我曾经是个很潇洒的人啊,后来欲望多了,考虑的也越来越多了,就难以开心起来。 这段时间以来的人和事让我明白了,与男人...
    苍白边缘阅读 2,350评论 0 1
  • 当今社会电子产品横行,很多人为了工作,或是打发时间,眼睛不离手机电脑、殊不知长期下去眼睛负重太多就要闹情...
    太阳照进你心窝阅读 2,806评论 0 0

友情链接更多精彩内容