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

    python可以继承父类方法吗

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

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

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

    1

    2

    3

    4

    5

    6

    class Animal:

        def heshui(self):

            print('动物正在喝水')

     

    class Cat(Animal):

        pass

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

    1

    2

    3

    4

    5

    6

    7

    #接上面代码

     

    cat = Cat()

     

    cat.heshui()

     

    >>>动物正在喝水

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    class Animal:

        def heshui(self):

            print('动物正在喝水')

     

    class Cat(Animal):

        def heshui(self):

            print('猫正在喝水')

    cat = Cat()

    cat.heshui()

     

    >>>猫正在喝水

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    class Animal:

        def heshui(self):

            print('动物正在喝水')

     

    class Cat(Animal):

        def heshui(self):

            super().heshui()

    cat = Cat()

    cat.heshui()

     

    >>>动物正在喝水

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

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

    1

    2

    3

    4

    5

    6

    7

    8

    class Animal:

        def __heshui(self):

            print('动物正在喝水')class Cat(Animal):

        def heshui(self):

            super()._Animal__heshui()

     

    cat = Cat()

    cat.heshui()>>>动物正在喝水

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    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__ 方法,这样就可以调用了:

    1

    2

    3

    4

    5

    6

    7

    8

    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学习网