password
URL
type
status
date
slug
summary
tags
category
icon
周起始
标签
是否汉化
醉眼看人间,人人都温柔,醒时看事态,事事都炎凉。
类的继承也是一个非常有用的设计,我们在新定义类时,如果它属于之前定义过类的一部分,则可以继承父类的特性。
继承方法
基本方法如下:
括号里的类名为父类,会继承父类(支持一到多个)里的所有属性和方法。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
类继承案例
在之前类的定义中我们定义一个学生(Student)类,我们现在需要一个大学生的类,它也是学生,可以继承学生类
我们来实例化使用一下:
方法重写
如果所继承的父类的方法无法满足使用,可以进行重写,这个过程叫方法的覆盖(override)。如上例中
Student
类的 say
方法不能满足,我们可以重写:我们调用时,使用了我们重写的方法逻辑:
super() 函数
super() 函数是用于调用父类(超类)的一个方法,语法是:
super(type[, object-or-type])
。super(SubClass, self).method()
的意思是,根据 self 去找 SubClass 的「父亲」,然后调用这个「父亲」的 method()。经常用在我们在子类中重写了父类中的方法,但有时候还是需要用父类中的方法。执行如下:
多继承
如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
MRO (Method Resolution Order):python 对于每一个类都有一个 MRO 列表,此表的生成有以下原则:子类永远在父类之前,如果有多个父类,那么按照它们在列表中的顺序被检查,如果下一个类有两个合法的选择,那么就只选择第一个。参考
继承性
类中的属性和方法有可继承性(inheritable versus)与不可继承属性(non-inheritable)之说,如果不希望其他类来继承,可以在命名变量名和函数名时用双下划线开头:
试着继续父亲的类(Father),然后调用相关属性和方法试试?这些私有函数的作用范围仅在当前类,其表象上可以被重写,但实际上并无重写的效果。
内置方法重载
除了对自己定义的方法进行重写,还可以对内置方法进行重写,如
__init__ ( self [,args...] )
构造函数, 调用方法 obj = className(args)
。更多的内容可以查看Python的内置类属性。
离开乏味的皮囊,自由的灵魂在路上
- Name: Alan Hsu
- Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
- Email:xulanzhong521gmail.com
- Twitter:@AlanHsu521
- Telegram:@AlanHsu521
- WeChat: Alan_Hsu_521
- Github: https://github.com/xsoway/
- Blog: https://xmylog.com
- Author:Alan_Hsu
- URL:https://xmylog.com/article/articles_python_class
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts