• 技术文章 >常见问题 >Python常见问题

    python可以继承父类方法吗

    silencementsilencement2019-08-24 15:19:51原创2849

    python继承,调用父类属性方法

    在python里面,继承一个类只需要这样写:

    class Animal:
        def heshui(self):
            print('动物正在喝水')
    
    class Cat(Animal):
        pass

    这样Cat就有了Animal的所有属性和方法,调用的时候直接调用就可以了:

    #接上面代码
    
    cat = Cat()
    
    cat.heshui()
    
    >>>动物正在喝水

    这个时候,如果子类想重写父类的方法,可以直接重写:

    class Animal:
        def heshui(self):
            print('动物正在喝水')
    
    class Cat(Animal):
        def heshui(self):
            print('猫正在喝水')
    cat = Cat()
    cat.heshui()
    
    >>>猫正在喝水

    如果想调用父类的 heshui 这个方法,可以用 super() :

    class Animal:
        def heshui(self):
            print('动物正在喝水')
    
    class Cat(Animal):
        def heshui(self):
            super().heshui()
    cat = Cat()
    cat.heshui()
    
    >>>动物正在喝水

    强制调用父类私有属性方法

    如果父类的方法是私有方法,如 def __heshui(self) 这样的话再去调用就提示没有这个方法,其实编译器是把这个方法的名字改成了 _Animal__heshui(),如果强制调用,可以这样:

    class Animal:
        def __heshui(self):
            print('动物正在喝水')class Cat(Animal):
        def heshui(self):
            super()._Animal__heshui()
    
    cat = Cat()
    cat.heshui()>>>动物正在喝水

    最后,如果自己也定义了 __init__ 方法,那么父类的属性是不能直接调用的:

    class Animal:
        def __init__(self):
            self.a = 'aaa'
    
    class Cat(Animal):
        def __init__(self):
            pass
    
    cat = Cat()
    print(cat.a)
    
    >>>AttributeError: 'Cat' object has no attribute 'a'

    那么可以在 子类的 __init__中调用一下父类的 __init__ 方法,这样就可以调用了:

    class Animal:
        def __init__(self):
            self.a = 'aaa'class Cat(Animal):
        def __init__(self):
            super().__init__()  #也可以用 Animal.__init__(self)  这里面的self一定要加上
    
    cat = Cat()
    print(cat.a)>>>aaa
    专题推荐:继承
    上一篇:python判断是否是目录 下一篇:python为什么是胶水语言

    相关文章推荐

    • python怎么判断某一对象是否为字典

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网