1.为什么要有类的继承性?(继承性的好处)
继承性的好处:
①减少了代码的冗余,提供了代码的复用性
②提高了程序的扩展性 
③(类与类之间产生了联系)为多态的使用提供了前提
2.类继承性的格式:单继承和多继承
#python2中无继承父类,称之经典类,python3中已默认继承object
python2:
class Person:
pass

python3:注意python3中不写默认继承类object,也不会报错。
class Persono(object):
pass
Python支持单继承和多继承。这点跟强类型语言是有所不同的。
python中继承的格式如下:用()
class 子类名B(父类名1,父类名2): #只要区别单继承还是多继承
子类体
------------代码演示---------------------------------------------------------------------
#父类Person
class Person(object):
def __init__(self,name ,age):
self.name = name
self.age = age
#子类,Studnent
class Student(Person):
def __init__(self,grade):
self.grade = grade

def p(self):
print("这是子类的方法")
3.子类继承了父类以后有哪些特性?(以单继承为例)
#父类Person
class Person(object):
country = "china"
__sex = "male"
def __init__(self,name ,age):
self.name = name
self.__age = age #父类的私有属性
#给私有属性提供get和set方法
def getSex(self):
return self.__sex
def setSex(self,sex ):
self.__sex = sex
def getAge(self):
return self.__age
def setAge(self,age):
self.__age = age
#父类的共有方法
def p(self):
print("这是父类的方法")

def p1(self):
print("这是父类的方法p1")
#父类的私有方法
def __p(self):
print("父类的私有方法")
#子类,Studnent
class Student(Person):
#1.子类默认继承了父类的构造方法__init__(),创建对象时默认调用.但是子类也可以有直接的构造方法__init()
#1.若子类有自己的init__()__方法,则该方法的参数个数要大于等于父类的个数,否则报错,因为会默认调用父类的。
def __init__(self, name, age, grade):#如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init_
Person.__init__(self, name, age) # 调用父类的构造方法,实现子类初始化,如果不调用要分别赋值
#super().__init__(name,age) #注意,也可以用super()调用父类的构造方法,但这个时候参数不用写self了。
self.grade = grade
#2.子类中,有一个和父类中相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法,也叫方法的重写(override)
def p(self):
print("这是子类的方法")

#--------创建对象--------------------------------------------------------------------
stu = Student("tom",11,88)
#3.子类继承了父类的所有属性,但是私有属性不能直接调用,要通过方法。况且私有属性连父类自己都不能直接调用
print(stu.country,stu.name,stu.grade)
#print(stu.age,stu.sex) #调用私有属性报错,可以用 get/set方法调用私有属性。
print(stu.getAge(),stu.getSex())

#4.子类继承了父类的所有方法,同样私有方法不能直接调用(父类自己都不能直接调用,何况子类。)。

stu.p() #如果父类中和子类有同名的方法,那么默认调用子类的,子类覆盖父类的方法了。
stu.p1() #直接调用父类中有,子类没有的方法。
=======执行结果============================================================================
china tom 88
11 male
这是子类的方法
这是父类的方法p1
总结:1.子类在继承父类时,默认继承了父类的 __init__()方法,如果子类没有重写__init__方法,则在创建对象时默认调用父类的该方法。但如果重写了__init__ 时,实例化子类时,就不会调用父类已经定义的 __init_

2.因为子类默认继承了父类的构造方法,所以子类可以不需要重写__init__()方法。如果子类重写了自己的__init__()方法,那么子类该方法的参数个数要大于等于父类的个数(要包含父类的参数)。否则,报错。因为python中一个类中只能有一个init方法,不支持构造方法的重载。

3.注意:可以用super().的形式调用父类的构造方法,但这个时候参数不用写self了,注意跟直接用父类名.形式调用的区别。

4.子类继承了父类所有的属性,包扣私有属性,只是私有属性不能直接去调用,而是要通过get/set方法进行调用。

5.子类继承了父类的所有方法,同样 私有方法不能外部直接调用。

6.同样如果父类还有父类,那么子类也会继承父类的父类所有方法和属性(注意私有属性和 方法同样访问不了)

python基础学习笔记——单继承的更多相关文章

  1. python基础学习笔记—— 多继承

    本节主要内容: 1.python多继承 2.python经典类的MRO 3.python新式类的MRO.C3算法 4.super是什么鬼? 一.python多继承 在前⾯的学习过程中. 我们已经知道了 ...

  2. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  3. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  4. python 基础学习笔记(1)

    声明:  本人是在校学生,自学python,也是刚刚开始学习,写博客纯属为了让自己整理知识点和关键内容,当然也希望可以通过我都博客来提醒一些零基础学习python的人们.若有什么不对,请大家及时指出, ...

  5. Python基础学习笔记(一)入门

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://w ...

  6. Python基础学习笔记(十三)异常

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-exceptions.html Python用异常对象(excep ...

  7. Python基础学习笔记(十二)文件I/O

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...

  8. Python基础学习笔记(十一)函数、模块与包

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...

  9. Python基础学习笔记(十)日期Calendar和时间Timer

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-date-time.html 3. http://www.liao ...

随机推荐

  1. 日历插件:Bootstrap的datetimepicker插件

    注意:可以选择性引入 bootstrap.min.css和bootstrap.min.js,引入样式更好控制 option选项 0-hour 1-day 2-month 3-year 4-all ye ...

  2. 死磕 java原子类之终结篇(面试题)

    概览 原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换. 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割 ...

  3. swift基础-2

    一.基本运算符 let a = 5 var b = 10 b = a if a = b{ swift 中赋值运算符,并不将自身作为一个值进行返回,所以编译不合法,帮开发者避免错误,很人性化的语言 } ...

  4. js中.toString()和String()的一丢丢区别

    1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 例如将false转为字符串类型 <script>   var str = false ...

  5. elasticsearch 2.4 windows版jvm内存设置

    本文编写目的是因为网上有很多es修改内存配置的文章,方法也各有不同,但在我的情况下(es 2.4 windows版)发现很多方法都是无效的,有效只有以下方法 第一个是xms,第二个是xmx

  6. UNITY_MATRIX_MVP和UnityObjectToClipPos

    在unity5.6以上版本中,shader中的UNITY_MATRIX_MVP将会被UnityObjectToClipPos替代,以后我们在写顶点函数时就是这样的 v2f vert(appdata v ...

  7. Windows Azure 配置Active Directory 主机(2)

    前一篇概况给大家介绍了,在云端部署一台DC 需要满足一些条件,接下来进入正题,云端VM安装域控制器具体步骤. 步骤1 :验证 主DC 的静态 IP 地址 1.登录到 Corp 网络上的 主DC. 2. ...

  8. 洛谷 P3353 在你窗外闪耀的星星

    题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的 ...

  9. COGS 2342. [SCOI2007]kshort

    ★★☆   输入文件:bzoj_1073.in   输出文件:bzoj_1073.out   简单对比时间限制:2 s   内存限制:512 MB [题目描述] 有n个城市和m条单向道路,城市编号为1 ...

  10. xcode技巧

    1.统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -name ...