1. 概念解释

  继承:有两个类:A类和B类。那么A类就拥有了B类中的属性和方法。

  * 例如:Object:是所有类的父亲,还可以成为基类或者超类(super())

  * 继承者为子类,被继承者成为父类。

2. 继承的作用

  * 继承花间了代码,减少了冗余。

  * 提高了代码的健壮性。

  * 提高了代码的安全性。

  * 是多态的前提。(Polymorphism)

  继承也有缺点:继承是高内聚、高耦合的形态。

  (备注:耦合和内聚是描述类与类之间的关系。耦合性越低、内聚性越高,代码质量越好)

3. 单继承

  超类函数:super()

  格式1:

  super(当前类名,self).继承内容

  其意思是:调用父类中的内容。

  格式2:

  super().继承内容 # 也可以不写括号中的内容。

  

  举例说明1:一个单继承的小例子

class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def run(self):
print("run")
def eat(self,food):
print("eat" + food) class Student(Person):
def __init__(self,name,age):
# 调用父类中的__init__也就是Person中的
super(Student,self).__init__(name,age) stu = Student("Tom",)
print(stu.name,stu.age)
stu.run() # 调用父类中的方法。

  举例说明2:我们发现子类其实也可以有自己的一些属性。

子类中还可以有自己独有的属性
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def run(self):
print("run")
def eat(self,food):
print("eat" + food) class Student(Person):
def __init__(self,name,age,stuID):
# 调用父类中的__init__也就是Person中的
super(Student,self).__init__(name,age)
# 子类可以有一些独有的属性
self.stuID = stuID stu = Student("Tom",,)
print(stu.name,stu.age)
print(stu.stuID)

   

  举例说明3:

  另外,我们前面说过单下划线和双下划线中"__变量名"的这种形式,属于私有属性。这样子类继承父类的时候私有属性的时候我们可以通过子类访问父类中获取私有属性的方法得到。这里我们写了一个setMoney和getMoney的方法。可以访问到父类当中的私有属性了。

  我们还发现super()超类的方法,还可以直接用父类的名字点上想继承的属性,其效果也是一样的。

# 父类如果有私有属性无法继承过来。
# 但是通过子类访问父类当中获取私有属性的方法可以得到私有属性
class Person(object):
def __init__(self,name,age,money):
self.name = name
self.age = age
self.__money = money # 私有属性
# 写set和get方法
def setMoney(self,money):
self.__money = money
def getMoney(self):
return self.__money def run(self):
print("run")
def eat(self,food):
print("eat" + food) class Student(Person):
def __init__(self,name,age,money,stuID):
# 调用父类中的__init__也就是Person中的
super(Student,self).__init__(name,age,money)
# 表示让父类中的self代表当前的Student的对象 # Person.__init__(self,name,age,money) #这种写法也是可以的
# 此时的self相当于创建子类的对象 # super().__init__(name, age, money) # 其实里面的内容不写也可以 # 子类可以有一些独有的属性
self.stuID = stuID def stuFunc(self):
print(self.__money) stu = Student("Tom",,,)
print(stu.name,stu.age)
# stu.stuFunc()
# 报错
# Traceback (most recent call last):
# File "F:/QUANT/练习/day04.py", line , in <module>
# stu.stuFunc()
# File "F:/QUANT/练习/day04.py", line , in stuFunc
# print(self.__money)
# AttributeError: 'Student' object has no attribute '_Student__money' print(stu.getMoney()) # 通过继承过来的的共有方法访问私有属性。

4. 多继承

  也就是说,我们不光一个子类可以继承一个父类,也可以继承多个父类,通过逗号进行分割。  

  举例说明4:一个简单的多继承。

class Father(object):
def __init__(self,money):
self.money = money def play(self):
print("play")
def func(self):
print("func") class Mother(object):
def __init__(self, faceValue):
self.faceValue = faceValue def eat(self):
print("eat") def func(self):
print("func2") class Child(Father,Mother):
def __init__(self,money,faceValue):
Father.__init__(self,money)
Mother.__init__(self,faceValue)
# 此时的self指的是当前类的self # 我们写一个主程序
def main():
c = Child(,)
print(c.money,c.faceValue)
c.play()
c.eat()
# 注意如果方法名相同,默认调用的是在括号中排前面的父类中的方法
c.func() if __name__ == '__main__':
main()

  

  举例说明5:

  思考:在添加100种动物,都有name属性和eat方法。采用继承解决的方式
  定义一个有name属性和eat方法的Animal类,让所有的动物类都继承自Animal

思考:在添加100种动物,都有name属性和eat方法。采用继承解决的方式
定义一个有name属性和eat方法的Animal类,让所有的动物类都继承自Animal class Animal(object): # 动物类
def __init__(self,name):
self.name = name def eat(self):
print(self.name + "吃") class Cat(Animal): # 猫类
def __init__(self,name):
super(Cat,self).__init__(name)
# 不用写了
# def eat(self):
# print(self.name + "吃") class Mouse(Animal): # 老鼠类
def __init__(self, name):
super(Mouse, self).__init__(name)
# 不用写了
# def eat(self):
# print(self.name + "吃") Tom = Cat("Tom")
Jerry = Mouse("Jerry") Tom.eat()
Jerry.eat()

Python笔记_第三篇_面向对象_6.继承(单继承和多继承)的更多相关文章

  1. Python笔记_第三篇_面向对象_4.单下划线和双下划线

    说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...

  2. Python笔记_第三篇_面向对象_2.第一个Python类

    1. 设计一个类: 设计一个类主要从三个方面进行考虑: 第一:类名:类名要见名知意.首字母大写. 第二:属性. 第三:方法. 备注:在Python中有些东西并不是绝对化的事情,有些根据Python社区 ...

  3. Python笔记_第三篇_面向对象_9.Python中的"get"和"set"方法(@property和@.setter)

    1. 限制访问的问题: 如果学过C# 语言的我们可以知道C# 语言有get和set方法.我们之前想要获取父类中的私有变量,只能通过写一个set和get的函数进行访问或者通过类生成的新关键字来访问私有属 ...

  4. Python笔记_第三篇_面向对象_1.面向对象的基本概念和作用域

    1. 软件编程的实质: 软件编程就是将我们的思维转变成计算机能够识别语言的一个过程.重要的是思想,代码技术反而次要.因此思想也是最难的,突破固定的思想是关键 2. 什么是面向过程: * 自上而下顺序执 ...

  5. Python笔记_第三篇_面向对象_2.构造函数和析构函数(含self说明)

    1. 构造函数: 为什么要有构造函数? 打一个比方:类的创建就是好比你创建了好了一种格式的房间,你租给上一个住户的后,里面会对方很多“垃圾”和不规则的物品摆放.构造函数就是下一个住户再使用的时候进行物 ...

  6. Python笔记_第三篇_面向对象_5.一个关于类的实例(人开枪射击子弹)

    1. 我们学了类的这些东西,用这些类我们来操作一个关于类的实例. 2. 题目:人开枪射击子弹,然后具有装弹动作,然后再开枪. 第一步:设计类: 人类名:Person属性:gun行为:fire,fill ...

  7. Python笔记_第三篇_面向对象_3.重载(overloading)和重写(overriding)

    1. 重载: overloading:就是将函数重新定义一遍. 1.1 __str__( )和__repr__( )的重载: 格式: __str__( ):在调用print打印对象时自动调用,是给用户 ...

  8. Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法

    1. 对象属性和类属性. 我们之前接触到,在类中,我们一般都是通过构造函数的方式去写一些类的相关属性.在第一次介绍类的时候我们把一些属性写到构造函数外面并没有用到构造函数,其实当时在写的时候,就是在给 ...

  9. Python笔记_第三篇_面向对象_7.多态

    1. 多态的概念 多态:一种事物的多种形态.其表现形式就是连续的继承关系. 还以人喂食动物的例子.最终目标是人可以喂食任何一种动物.如果人要喂食100多种动物,难道要写100中方法吗?多态就是把属性和 ...

随机推荐

  1. springboot - 映射 HTTP Response Status Codes 到自定义 JSP Error 页面

    1.总览 2.代码 1).pom.xml <dependencies> <dependency> <groupId>org.springframework.boot ...

  2. 【剑指Offer】面试题06.从尾到头打印链表

    题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 1000 ...

  3. MBE风格图标

    图标的定义 图标是一种通过相似性或类比行来代表对象的符号. 图标的重要性 1.图形以其无与伦比的识别性带来信息传达效率的提升. 2.图形以其百变多样的趣味性带来视觉体验的享受提成用户体验. 3.图形以 ...

  4. C++基础--函数模板

    函数模板是通用的函数描述,其使用泛型来定义函数.其实就是有些操作,如果撇开具体的变量的数据类型,其操作是一样的如果我们将这些操作写成一个模板,在调用不同变量的时候就设定好变量类型就可了,后续的操作基本 ...

  5. BZOJ 3876 [Ahoi2014&Jsoi2014]支线剧情

    题解: 带下界的费用流 对于x->y边权为z Addedge(x,t,1,0) Addedge(s,y,1,z) Addedge(x,y,inf,0) 然后对每个点Addedge(i,1,inf ...

  6. 在开发过程中遇到的Oracle的坑及开发技巧

    本人与2018年毕业,工作一年多,仍是菜鸟,自毕业以来一直从事java软件开发工作,工作中大部分数据库都是使用的Oracle,碰到的问题总结一下(随时更新). 1.sql中使用group by 分组时 ...

  7. MVC学生管理系统-阶段V(模糊查询)

    项目源码 :https://download.csdn.net/download/weixin_44718300/11091042 此处省略一段话.去上一篇查看 NO01:修改list.jsp < ...

  8. Floyd--P1119 灾后重建

    题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...

  9. 关于Java中内省的总结

    内省基于JavaBean规范对反射进行了封装,提供了更加便捷的通过getter/setter方法来访问字段的方式 Java内省的知识结构图 JavaBean的规范 JavaBean在现在可以认为就是普 ...

  10. kubelet组件详解---链接

    https://blog.csdn.net/jettery/article/details/78891733