进击のpython

*****

继承


继承的出现!就是一个作用!

为了节省代码!

为什么说节省代码?

你爸爸要是王健林

你是不是就不用愁怎么获得钱了?

为啥?

是不是钱已经有了!

直接拿来用就行了!

我们想一下奥

狗和人是不是都会吃东西?

那么吃东西这个东西是不是算是他俩的共有属性?

那我就可以把这个吃东西当作父类,让人和狗继承

# -*- coding: utf-8 -*-
# @Time : 2019.07.16
# @Author : 爪爪
# @Url : https://www.cnblogs.com/jevious/ class Animals: def __init__(self, name, old):
self.name = name
self.old = old
print(f"{name},{old}岁") class Dog(Animals): # 是不是原先都是没写的??现在就是有用的了!
pass class Person(Animals):
pass p = Person("zhangsan", 18) d = Dog("ponny", 10)

以前Dog类后面不是没有括号嘛?

这回有了!括号里是他继承的父类

可以看出来,尽管Dog里面没有函数体

但是也看到了,执行了父类的代码

所以也就看到了继承了父类吧!

同时不光继承父类,也能够有自己的方法调用!

# -*- coding: utf-8 -*-
# @Time : 2019.07.16
# @Author : 爪爪
# @Url : https://www.cnblogs.com/jevious/ class Animals: def __init__(self, name, old):
self.name = name
self.old = old
print(f"{name},{old}岁") class Dog(Animals):
pass class Person(Animals): def info(self):
print(f"{self.name}是个人!") p = Person("zhangsan", 18) d = Dog("ponny", 10) p.info()

  • 属性&方法重写

    比如说我们在刚才的父类里定义了动物类型是哺乳动物,因为哺乳动物占大多数嘛

    但是有些动物就不是哺乳动物,我们继承了父类,那这个哺乳动物的这个属性

    也就跟着过来了,我们想要修改他

    很容易,只需要在特殊动物上自己重新定义就行

    # -*- coding: utf-8 -*-
    # @Time : 2019.07.16
    # @Author : 爪爪
    # @Url : https://www.cnblogs.com/jevious/ class Animals:
    a_type = "哺乳" def __init__(self, name, old):
    self.name = name
    self.old = old print(f"{name},{old}岁,是{self.a_type}动物") class Dog(Animals):
    pass class Person(Animals): def info(self):
    print(f"{self.name}是个人!") class Snack(Animals):
    a_type = "冷血动物"
    pass p = Person("zhangsan", 18)
    s = Snack("sheshe", 2)
    d = Dog("ponny", 10)
    zhangsan,18岁,是哺乳动物
    sheshe,2岁,是冷血动物动物
    ponny,10岁,是哺乳动物

    同理,方法也可以这样重写

    # -*- coding: utf-8 -*-
    # @Time : 2019.07.16
    # @Author : 爪爪
    # @Url : https://www.cnblogs.com/jevious/ class Animals:
    a_type = "哺乳" def __init__(self, name, old):
    self.name = name
    self.old = old print(f"{name},{old}岁,是{self.a_type}动物") def info(self):
    print(f"{self.name}是个{self.a_type}动物!") class Dog(Animals):
    pass class Person(Animals): def info(self):
    print(f"{self.name}是个人!") class Snack(Animals):
    a_type = "冷血动物" def info(self):
    print(f"我是{self.name}的父类重写") pass p = Person("zhangsan", 18)
    s = Snack("sheshe", 2)
    d = Dog("ponny", 10) d.info() p.info() s.info()
    zhangsan,18岁,是哺乳动物
    sheshe,2岁,是冷血动物动物
    ponny,10岁,是哺乳动物
    ponny是个哺乳动物!
    zhangsan是个人!
    我是sheshe的父类重写

    我的Snack类觉得你父类里面的info方法写的不好

    我想自己重新写一个

    所以就在自己的类里重新写上这个方法

    重新定义(--init--也可以这么搞)

    也可以看出来

    当属性相同或者方法相同的时候

    以子类为准!


  • 同时执行子类&父类方法

    那我有没有另外的一种情况

    我Snack觉得你父类的info方法写的挺好,但是还不够好

    我不修改你,我想在你的基础上再加点

    怎么做呢?

    # -*- coding: utf-8 -*-
    # @Time : 2019.07.16
    # @Author : 爪爪
    # @Url : https://www.cnblogs.com/jevious/ class Animals:
    a_type = "哺乳" def __init__(self, name, old):
    self.name = name
    self.old = old print(f"{name},{old}岁,是{self.a_type}动物") def info(self):
    print(f"{self.name}是个{self.a_type}动物!") class Snack(Animals):
    a_type = "冷血动物" def info(self):
    Animals.info(self) # 在这呢!
    print(f"我是{self.name}的父类重写") pass s = Snack("sheshe", 2) s.info()
    sheshe,2岁,是冷血动物动物
    sheshe是个冷血动物动物!
    我是sheshe的父类重写

    办法就是我先调用一下你父类的这个方法

    然后我再继续写,这样就会先打印父类的,再打印你新加的东西

    注意奥,要把self参数传进去


    那好了,我又想起了他 --init--

    我要是想再加个参数怎么做呢?

    例如:

    这是原先父类的(self, name, old)

    我想在我的Snack里变成(self, name, old,sex)

    怎么搞(直接加的是可以的,不用说了)

    还是可以向上面一样,先调用父类,再继续

    # -*- coding: utf-8 -*-
    # @Time : 2019.07.16
    # @Author : 爪爪
    # @Url : https://www.cnblogs.com/jevious/ class Animals:
    a_type = "哺乳" def __init__(self, name, old):
    self.name = name
    self.old = old print(f"{name},{old}岁,是{self.a_type}动物") def info(self):
    print(f"{self.name}是个{self.a_type}动物!") class Snack(Animals):
    a_type = "冷血动物" def __init__(self, name, old, sex):
    Animals.__init__(self, name, old) # 看这里!!!
    self.sex = sex def info(self):
    Animals.info(self)
    print(f"我是{self.name}的父类重写")
    print(f"这是我的性别{self.sex}") pass s = Snack("sheshe", 2, "man") # 这里就要传三个参数 s.info()
    sheshe,2岁,是冷血动物动物
    sheshe是个冷血动物动物!
    我是sheshe的父类重写
    这是我的性别man

    当然,你也会发现,这么写,稍微有点笨

    所以在Py3中,我们可以用一个函数来解决这个问题!

    super()(以前讲的,说面向对象再讲,有印象吧

    怎么用呢?

    # -*- coding: utf-8 -*-
    # @Time : 2019.07.16
    # @Author : 爪爪
    # @Url : https://www.cnblogs.com/jevious/ class Animals:
    a_type = "哺乳" def __init__(self, name, old):
    self.name = name
    self.old = old print(f"{name},{old}岁,是{self.a_type}动物") def info(self):
    print(f"{self.name}是个{self.a_type}动物!") class Snack(Animals):
    a_type = "冷血动物" def __init__(self, name, old, sex):
    # Animals.__init__(self, name, old) # 看这里!!!
    super(Snack, self).__init__(name, old) # 看这里!!!
    self.sex = sex def info(self):
    Animals.info(self)
    print(f"我是{self.name}的父类重写")
    print(f"这是我的性别{self.sex}") pass s = Snack("sheshe", 2, "man") # 这里就要传三个参数 s.info()

    super这里面啊应该写上你当前子类的名字(Snack)和 self

    然后 . 一下,后面是你要修改的方法,去掉self,只留下形参

    但是啊,这个人的记性啊,是真的差!怎么办呢?

    程序猿就为了能更简单一点!

    就有了如下的写法:

    # -*- coding: utf-8 -*-
    # @Time : 2019.07.16
    # @Author : 爪爪
    # @Url : https://www.cnblogs.com/jevious/ class Animals:
    a_type = "哺乳" def __init__(self, name, old):
    self.name = name
    self.old = old print(f"{name},{old}岁,是{self.a_type}动物") def info(self):
    print(f"{self.name}是个{self.a_type}动物!") class Snack(Animals):
    a_type = "冷血动物" def __init__(self, name, old, sex):
    # Animals.__init__(self, name, old) # 看这里!!!
    # super(Snack, self).__init__(name, old) # 看这里!!!
    super().__init__(name, old) # 看这里!
    self.sex = sex def info(self):
    Animals.info(self)
    print(f"我是{self.name}的父类重写")
    print(f"这是我的性别{self.sex}") pass s = Snack("sheshe", 2, "man") # 这里就要传三个参数 s.info()

    更简单了是吧!

    所以知道选哪个了吧!

    别跟我说是不是只有--init--能用super

    咋的啊?--init-- 多个啥啊?

    不是函数啊!

    这个函数都能用

    别的函数凭啥不能用?


*这是单继承*
*多继承在后面*

~~核心编程(四):面向对象——单继承&复写~~的更多相关文章

  1. python面向对象单继承,多继承和super()调用

    python 目录 python 1.继承 1.单继承 2.多继承 3.子类重写父类的同名属性和方法 核心点: 4.多层继承 5.super()的使用 1.继承 1.单继承 说明: 虽然子类没有定义_ ...

  2. Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)

    Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...

  3. Python - 面向对象编程 - 三大特性之继承

    继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...

  4. 1.Java基础-面向对象编程思想(封装继承多态接口)

    封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的 ...

  5. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  6. (二)Javascript面向对象编程:构造函数的继承

    Javascript面向对象编程:构造函数的继承   这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承 ...

  7. C++知识点总结(四)——面向对象的编程细节总结

    1.空类的默认函数 一般情况下,对于任意一个类A,如果程序员不显示的声明和定义上述函数,C++编译器将会自动的为A产生4个public inline(公有.内联)的默认函数,这4个函数最常见的形式为: ...

  8. day 27 网路编程 面向对象多继承

    知识补充: 字符串转化为字节 string1  = input(“请输入你的名字”) string1.encode('utf-8') 字节转化为字符串 byte1 = b"alex" ...

  9. python之面向对象三大特性: 继承(单继承)

    什么是继承 专业角度: B 继承 A类, B就叫做A的子类,派生类, A叫做B的父类,基类,超类. B类以及B类的对象使用A类的所有的属性以及方法. 字面意思: 继承就是继承父母所有的资产 class ...

随机推荐

  1. 在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一(超过这65535范围的Unicode字符,则需要使用一些诡异的技巧来实现)

    在计算机科学领域中,Unicode(统一码.万国码.单一码.标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统.Unicode 是基于通用字符集(Universal Charac ...

  2. delphi dom动态创建节点方法

    在一次测试demo中 需要动态的创建xml节点并添加,实现方法如下: var NewItem:IXMLDOMElement; NewItem:=ConfigDoc.createElement('ite ...

  3. iOS UITableView动态隐藏或显示Item

    通过改变要隐藏的item的高度实现隐藏和显示item 1.创建UITableView #import "ViewController.h" @interface ViewContr ...

  4. Linux7下配置Nginx站点.

    今天闲来无事,把服务器重新配置了一下,作为开发者,实际上很多人都是长时间不去配置服务器的,所以曾经很多东西又忘掉了差不多. 特在此分享一下配置成功后的配置文件内容. 其实配置后的文件内容很简单,也没有 ...

  5. Android零基础入门第77节:Activity任务栈和启动模式

    通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的方式来管理Activity的实例.当启动一个应用时,Android就会为之 ...

  6. SimpleMembershipProvider 的 MySql 实现

    认 证我一直用的是微软的 Membership 体系,看 MySql 也实现了对应的 Provider,在新建立了一个 MVC4 项目后,把 Provider 一改就直接启动,然后就出错了.异常是“T ...

  7. Qt 下快速读写Excel指南(尘中远)

    Qt Windows 下快速读写Excel指南 很多人搜如何读写excel都会看到用QAxObject来进行操作,很多人试了之后都会发现一个问题,就是慢,非常缓慢!因此很多人得出结论是QAxObjec ...

  8. Qt 使用 Google Breakpad 捕获程序崩溃报告(dump文件) good

    http://blog.csdn.net/GoForwardToStep/article/details/56685810

  9. java基础第十三篇之Collection

    常见的几种数据结构: * 1.堆栈:先进后出 * 2.队列:先进先出 * 3.数组:查找快,增删慢 * 4.链表:查找慢,增删快  import java.util.LinkedList; /* * ...

  10. 微信商城小程序 带java后台源码

    微信小程序商城(Java版) 技术选型 1 后端使用技术 1.1 spring-web-4.0.2.RELEASE 1.2 mybatis3.2.8 1.3 shiro1.2.3 1.4 servle ...