前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python_子类调用父类的方法

Python_子类调用父类的方法

作者头像
py3study
发布2020-01-07 10:41:16
4.8K0
发布2020-01-07 10:41:16
举报
文章被收录于专栏:python3python3

1.方式一 子类调用父类的方法,包含2中形式的调用。一种形式是在类内部通过继承的方式调用父类的方法,另外一种形式是子类实例化后之后通过继承的方式来调用父类的方法。如下图所示:

Python_子类调用父类的方法
Python_子类调用父类的方法

注意一点,在子类内部通过继承的方式调用父类的属性时,必须要带上self位置参数(self只在实例化过程中和在实例调用属性时才能省略(self本来的含义就是指向实例自己));而实例在通过继承调用父类的属性或方法时,则不用传self参数,因为实例已经实例化了呀!!! 该部分的代码块如下:注意一点,在子类内部通过继承的方式调用父类的属性时,必须要带上self位置参数(self只在实例化过程中和在实例调用属性时才能省略(self本来的含义就是指向实例自己));而实例在通过继承调用父类的属性或方法时,则不用传self参数,因为实例已经实例化了呀!!! 该部分的代码块如下:

代码语言:javascript
复制
class Person():
    "人的类"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("%s开始吃饭了"%self.name)
class Student(Person):
    "学生类"
    def __init__(self,name,age,sex,classnaem):
        #子类调用父类的构造函数进行初始化
        Person.__init__(self,name,age,sex)  #通过子类把参数传给父类(self不能少,self只有在实例化和实例调用类时才能省略,此处不是)
        self.classnaem = classnaem
    def course(self):
        print("%s在%s上课"%(self.name,self.classnaem))
    def done(self):
        print("这个学生在干嘛?")
        #子类调用父类方法
        Person.eat(self)    #子类在调用父类方法必须要传self
#实例化一个子类
student = Student("周明",23,'男',"11届土木3班")
#调用子类本身的方法
student.course()
#通过子类调用父类的方法--->实例化之后来调用父类的方法
student.eat()
#调用子类的方法,在子类方法中调用了子类的方法,与student.eat有区别
student.done()

此时如果父类的名称更改了,那么在子类中所有用到父类名的地方均要进行修改了。所有此种方法不便于后期维护,为此我们选择方式二。 2.方式二 使用super来代替父类名,以方便代码的后期维护,见下图:

Python_子类调用父类的方法
Python_子类调用父类的方法

使用super的好处,一是可以代替父类名,这样后期父类名更改了,我们只需要更改子类名称后面的父类名即可,子类中其他的父类名可以不用更改;二是使用了super后,调用父类方法时可以不传参数self。 该部分的代码块为:

代码语言:javascript
复制
class Person():
    "人的类"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("%s开始吃饭了"%self.name)
class Student(Person):
    "学生类"
    def __init__(self,name,age,sex,classnaem):
        #子类调用父类的构造函数进行初始化
        # Person.__init__(self,name,age,sex)  #通过子类把参数传给父类(self不能少,self只有在实例化和实例调用类时才能省略,此处不是)
        #使用super来替换父类名
        super().__init__(name,age,sex)  #通过子类把参数传给父类,用super可以省略self
        self.classnaem = classnaem
    def course(self):
        print("%s在%s上课"%(self.name,self.classnaem))
    def done(self):
        print("这个学生在干嘛?")
        #子类调用父类方法
        super().eat()    #子类在调用父类方法,使用super可以省略self
#实例化一个子类
student = Student("周明",23,'男',"11届土木3班")
#调用子类本身的方法
student.course()
#通过子类调用父类的方法--->实例化之后来调用父类的方法
student.eat()
#调用子类的方法,在子类方法中调用了子类的方法,与student.eat有区别
student.done()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档