Python基础(二十三):面向对象之继承介绍

面向对象之继承介绍

一、继承的概念

生活中的继承,⼀般指的是子女继承父辈的财产。

  • 拓展1:经典类或旧式类

不由任意内置类型派生出的类,称之为经典类。

class 类名:
    代码
    ......

  • 拓展2:新式类
class 类名(object):
    代码

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下:

# ⽗类A
class A(object):
    def __init__(self):
        self.num = 1

    def info_print(self):
        print(self.num)

# ⼦类B
class B(A):
    pass

result = B()
result.info_print() # 1

在Python中,所有类默认继承object类,object类是顶级类或基类;其他⼦类叫做派生类。

二、单继承

故事主线:⼀个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了⼀套精湛的摊煎饼果子的技术。师父要把这套技术传授给他的唯⼀的最得意的徒弟。

分析:徒弟是不是要继承师父的所有技术?

# 1. 师⽗类
class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'
    
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
 
# 2. 徒弟类
class Prentice(Master):
    pass
# 3. 创建对象daqiu
daqiu = Prentice()
# 4. 对象访问实例属性
print(daqiu.kongfu)
# 5. 对象调⽤实例⽅法
daqiu.make_cake()

三、多继承

故事推进:daqiu是个爱学习的好孩子,想学习更多的煎饼果子技术,于是,在百度搜索到CSDN的博主报班学习煎饼果子技术。

所谓多继承意思就是⼀个类同时继承了多个父类。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 创建学校类
class School(object):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class Prentice(School, Master):
    pass
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()

注意:当⼀个类有多个父类的时候,默认使用第⼀个父类的同名属性和方法。

四、子类重写父类同名方法和属性

故事:daqiu掌握了师父和培训的技术后,自己潜心钻研出自己的独门配方的⼀套全新的煎饼果子技术。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'
    
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(object):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 独创配⽅
class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
print(Prentice.__mro__)

子类和父类具有同名属性和方法,默认使用子类的同名属性和方法。

五、子类调用父类的同名方法和属性

故事:很多顾客都希望也能吃到古法和Lansonli的技术的煎饼果子。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'
    
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(object):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class Prentice(School, Master):
    def __init__(self):
            self.kongfu = '[独创煎饼果⼦配⽅]'
 
    def make_cake(self):
# 如果是先调⽤了⽗类的属性和⽅法,⽗类属性会覆盖⼦类属性,故在调⽤属性前,先调⽤⾃⼰⼦类的初始化
        self.__init__()
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 调⽤⽗类⽅法,但是为保证调⽤到的也是⽗类的属性,必须在调⽤⽅法前调⽤⽗类的初始化
    def make_master_cake(self):
        Master.__init__(self)
        Master.make_cake(self)
 
    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

daqiu = Prentice()
daqiu.make_cake()
daqiu.make_master_cake()
daqiu.make_school_cake()
daqiu.make_cake()

六、多层继承

故事:N年后,daqiu老了,想要把所有技术传承给自己的徒弟。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(object):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创煎饼果⼦配⽅]'

    def make_cake(self):
        self.__init__()
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

    def make_master_cake(self):
        Master.__init__(self)
        Master.make_cake(self)

    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

# 徒孙类
class Tusun(Prentice):
    pass

xiaoqiu = Tusun()
xiaoqiu.make_cake()
xiaoqiu.make_school_cake()
xiaoqiu.make_master_cake()

七、super()调用父类方法

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(Master):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

        # ⽅法2.1
        # super(School, self).__init__()
        # super(School, self).make_cake()

        # ⽅法2.2
        super().__init__()
        super().make_cake()
        
class Prentice(School):
    def __init__(self):
        self.kongfu = '[独创煎饼果⼦技术]'

    def make_cake(self):
        self.__init__()
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

# ⼦类调⽤⽗类的同名⽅法和属性:把⽗类的同名属性和⽅法再次封装

    def make_master_cake(self):
        Master.__init__(self)
        Master.make_cake(self)

    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

# ⼀次性调⽤⽗类的同名属性和⽅法
    def make_old_cake(self):
        # ⽅法⼀:代码冗余;⽗类类名如果变化,这⾥代码需要频繁修改
        # Master.__init__(self)
        # Master.make_cake(self)
        # School.__init__(self)
        # School.make_cake(self)
        # ⽅法⼆: super()
        # ⽅法2.1 super(当前类名, self).函数()
        # super(Prentice, self).__init__()
        # super(Prentice, self).make_cake()
        # ⽅法2.2 super().函数()
        super().__init__()
        super().make_cake()

daqiu = Prentice()
daqiu.make_old_cake()

注意:使用super() 可以自动查找父类。调用顺序遵循 __mro__ 类属性的顺序。比较适合单继承使用。

八、私有权限

1、定义私有属性和方法

在Python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类。

故事:daqiu把技术传承给徒弟的同时,不想把自己的钱(20个亿)继承给徒弟,这个时候就要为钱这个实例属性设置私有权限。

设置私有权限的方法:在属性名和方法名前面加上两个下划线 __。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(object):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'
    
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创煎饼果⼦配⽅]'
        # 定义私有属性
        self.__money = 20

 # 定义私有⽅法
def __info_print(self):
    print(self.kongfu)
    print(self.__money)

def make_cake(self):
    self.__init__()
    print(f'运⽤{self.kongfu}制作煎饼果⼦')

def make_master_cake(self):
    Master.__init__(self)
    Master.make_cake(self)

def make_school_cake(self):
    School.__init__(self)
    School.make_cake(self)

# 徒孙类
class Tusun(Prentice):
    pass

daqiu = Prentice()
# 对象不能访问私有属性和私有⽅法
# print(daqiu.__money)
# daqiu.__info_print()
xiaoqiu = Tusun()
# ⼦类⽆法继承⽗类的私有属性和私有⽅法
# print(xiaoqiu.__money) # ⽆法访问实例属性__money
# xiaoqiu.__info_print()

注意:私有属性和私有方法只能在类里面访问和修改。

2、获取和修改私有属性值

在Python中,⼀般定义函数名 get_xx 用来获取私有属性,定义 set_xx 用来修改私有属性值。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(object):
    def __init__(self):
        self.kongfu = '[Lansonli煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创煎饼果⼦配⽅]'
        self.__money = 20

# 获取私有属性
    def get_money(self):
        return self.__money

# 修改私有属性
    def set_money(self):
        self.__money = 500

    def __info_print(self):
        print(self.kongfu)
        print(self.__money)

    def make_cake(self):
        self.__init__()
        print(f'运⽤{self.kongfu}制作煎饼果⼦')

    def make_master_cake(self):
        Master.__init__(self)
        Master.make_cake(self)

    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

# 徒孙类
class Tusun(Prentice):
    pass

daqiu = Prentice()
xiaoqiu = Tusun()
# 调⽤get_money函数获取私有属性money的值
print(xiaoqiu.get_money())
# 调⽤set_money函数修改私有属性money的值
xiaoqiu.set_money()
print(xiaoqiu.get_money())
本文转载于网络 如有侵权请联系删除

相关文章

  • JVM运行时数据区虚拟机栈

    JVM运行时数据区虚拟机栈虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。Java虚拟机栈是线程私有的,其生命周期与线程相同。每个方法在执行的同时都会创建一个栈帧。Java虚拟机栈描述的是Java方法执行的内存模型,每一次方法调用都对应着一个栈帧。这里区分下栈(也就是虚拟机栈)和堆,栈是运行时的单位,而堆是存储的单位。栈解决程序的运行问题,即程序如何执行,或者说如何处理、生成数据(编译时期)堆解决的是数据存储的问题,即数据怎么放,放哪里每个栈帧中都会保存方法的局部标量、操作数栈、动态链接、方法出口等信息。局部变量表8种基本数据类型(byte、char、boolean、short、int、float、double、long)引用类型(数组、类、接口)操作数栈:主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。栈执行的顺序:先进后出,后进先出虚拟机栈中可能出现的俩种错误,一种是栈深度大于虚拟机所允许的深度,将抛出St

  • 微信小程序跳转传值(微信怎样打开小程序)

    大家好,又见面了,我是你们的朋友全栈君。前情:首先我们有这么一种需求,就是我在一个列表中点击了某个item,跳转到详情界面,那么我就需要把item的实体数据从列表页面传递到详情页面,那么我们来看看微信小程序给我们提供的API:先看api:这里大家可以清楚看到api中说到的如何传递参数,其实它这里指的参数仅仅是一些普通的数据类型具体分析:这里我们要传递的实体是object类型,那么我们需要先把实体转成string类型进行传递,在详情页面接受到在逆向转成实体,如下面这段示例://这里我们跳转详情界面 queryItemClick:function(e){ varthat=this //拿到点击的index下标 varindex=e.currentTarget.dataset.index //将对象转为string varqueryBean=JSON.stringify(that.data.queryList[index]) wx.navigateTo({ url:'../queryResult/queryResult?queryBean='+queryBean, })

  • 【春节日更】瞅瞅,你是否了解 bind 方法 ?

    今天给大家介绍Function.prototype.bind()方法先来看道相关题目:functionf(y,z){ returnthis.x+y+z; } varm=f.bind({x:1},2); console.log(m(3));复制答案多少呢? 思考?思考?思考?结果为:6你对了嘛!!!哈哈哈没对就好好看看下面的介绍吧01bind方法首先,bind方法,是指Function.prototype.bind()MDN官方说明:bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被指定为bind()的第一个参数,而其余参数将作为新函数的参数,供调用时使用。将上面的描述,总结为以下三点: 1、bind()方法会创建一个新的函数2、这个新函数的this被指定为bind()的第一个参数3、其余参数将作为新函数的参数了解了关于bind的说明,再来看看题目02题目解析 回顾: functionf(y,z){ returnthis.x+y+z; } varm=f.bind({x:1},2); console.log(m(3));复制解析: 1、m是bind()返回的新

  • Oracle|to_date()格式化日期【坑】

    今天调整报表检索条件的时候遇到to_date()格式化日期的问题,明细如下: 1.总数据159条select*fromdaily_file_information;复制2.查询每月数据3月-139条4月-16条5月-4条selectto_char(dfi_create_time,'yyyy-mm'),count(1)fromdaily_file_informationgroupbyto_char(dfi_create_time,'yyyy-mm');复制3.第一种查询方式【...between...and...】SQL1:结果159条 selectcount(1)fromdaily_file_informationwhere1=1andto_char(dfi_create_time,'yyyy-mm')between'2020-03'and'2020-05';复制SQL2:结果155条 selectcount(1)fromdaily_file_informationwhere1=1and

  • MySQL NULL 值处理--Java免费学习

    我们已经知道MySQL使用SQLSELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:ISNULL:当列的值是NULL,此运算符返回true。ISNOTNULL:当列的值不为NULL,运算符返回true。<=>:比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。关于NULL的条件比较运算是比较特殊的。你不能使用=NULL或!=NULL在列中查找NULL值。在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即NULL=NULL返回false。MySQL中处理NULL使用ISNULL和ISNOTNULL运算符。在命令提示符中使用NULL值以下实例中假设数据库TUTORIALS中的表tcount_tbl含有两列tutorial_author和tutorial_count,tutorial_count中设置插入NULL值。实例尝试以下实例:root@host#mysql-uroot-ppassword;Enterpass

  • OSI 7层的简单讲解

    开放系统互连(OSI)模型定义了一个网络框架,以在七层中实现协议。OSI模型实际上没有任何内容。事实上上,它甚至是无形的。OSI模型在联网过程中不执行任何功能。它是一个概念框架,以便我们可以更好地理解正在进行的复杂交互。谁开发了OSI模型?国际标准化组织(ISO)开发了开放系统互连(OSI)模型。它将网络通信分为七层。在此模型中,第1-4层被认为是下层,主要关注数据的移动。第5-7层(称为上层)包含应用程序级别的数据。网络的运行有一个基本原则:“传递”。每一层负责一个非常具体的工作,然后将数据传递到下一层。第1层:物理层从OSI模型的最底层开始是物理层。物理层规定了在载体上发送和接收数据的硬件方法,包括定义电缆,网卡和物理方面。快速以太网,RS232和ATM是具有物理层组件的协议。它解决了网络的物理特征。这包括用于将所有物体连接在一起的电缆类型。所使用的连接器的类型,电缆的长度等。例如,用于100BaseT电缆的以太网标准规定了双绞线电缆的电气特性,连接器的尺寸和形状,电缆的最大长度。物理层还规定了用于通过电缆将数据从一个网络节点传输到另一个网络的信号的电气特性。除了‘0’或‘1’的二

  • 视频流媒体服务器如何用OBS推流录屏或直播?

    OBS是一款免费且开源的用于视频录制以及直播串流的软件。能兼容多种平台,在Windows,Mac以及Linux上都可以使用,它简单且快速的开始串流。之前我就介绍了OBS推流软件结合我们的流媒体直播服务器如何进行推流直播,我们的流媒体服务器就能够用OBS推流直播,是个非常便捷的工具。那么本篇就为大家介绍下OBS推流录屏或直播的流程。1、我们首先要下载软件,安装好之后打开软件可以看到场景的左下角,有个加号,点击这个加号2、可以选择添加一个窗口捕获,或者显示器捕获;我这里选择的是“显示器捕获”,关于这些有什么区别,大家可以每一个都去试一下,你就能明白了。3、添加“显示器捕获”之后,即是把整个屏幕会被录下来;再点击右边的设置;4、找到“串流”选项,添加直播平台的“推流地址”,比如下面这个地址:rtmp://push-rtmp-l6.douyincdn.com/third/stream-671680522621452129931784?did=370665145207331&k=60d8ecsgsdgf4c81815a2&t=15644852488283&uid=9654

  • 263. 丑数

    题目描述编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2,3,5的正整数。示例1:输入:6 输出:true 解释:6=2×3复制示例2:输入:8 输出:true 解释:8=2×2×2复制示例3:输入:14 输出:false 解释:14不是丑数,因为它包含了另外一个质因数7。复制说明:1是丑数。输入不会超过32位有符号整数的范围:[−231,231−1]。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/ugly-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路题目要求给定一个数字,判断是否为“丑陋数”(uglynumber),丑陋数是指只包含质因子2,3,5的正整数。根据定义,我们将给定数字除以2、3、5(顺序无所谓),直到无法整除。如果得到1,说明是所有因子都是2或3或5,如果不是1,则不是丑陋数。 这就好像我们判断一个数字是否为n(n为大于1的正整数)的幂次方一样,我们只需要不断除以n,直到无法整除,如果得到1,那么就是n的幂次方。这道题的不同在于它不再是某一个数字的幂次方,而是

  • VUE 入门基础(4)

    四,计算属性  基础例子    <divid=‘example’>       <p>0riginalmessage:“{{message}}”</p>       <p>Computedreversedmessage:”{{reversedMessage}}”</p>     </div>     Varvm=newVue({       el:“#example”,       data:{         message:‘Hello’       },       computed:{         reversedMessage:function(){         returnthis.message.split(“ ”).reverse().join(‘’)       }     }   })复制  声明了一个计算属性 reversedMessage 。我们提供的函数将用作属性 vm.reversedMessage 的getter    console.log(vm.reversedMessag

  • canvas 快速入门

    canvas快速入门在本文中,我们将学习Canvas的特性,包括如何在HTML文档中引入Canvas以及在Canvas上绘制图形和各种对象。我们也将学习如何修改绘制在Canvas上的图形和对象,以及如何擦除它们。最后,将通过一个例子来学习如何将Canvas,尺寸设置为浏览器窗口的大小。1.认识canvas元素与video和audio类似,canvas元素完全不需要任何外部插件就能够运行。你只需要使用HTML并使用2D谊染上下文API(2DrenderingcontextAPI)编写一些JavaScript代码。即使你现在还不了解什么是2D渲染上下文API,也不用担心一你很快就会熟悉这方面知识。canvas元素的用法很简单——我想说的是非常简单。开始只需要添加下面的代码:<canvaswidth="500"height="500"> <!--在此插入后备内客--> </canvas> 复制我想我应该坦诚地告诉你,这段代码实际上并没有实现什么特殊的效果。它仅仅创建了一个新的空白canvas元素,还无法看到任何内容,

  • 腾讯云腾讯数字农村应用场景

    村财公开实现村财公开,借助数字乡村小程序平台,更好地对外展示了贯彻落实党在乡村的方针和政策。村财公开的透明度和可信度也将大大提高,可以极大地提高人民群众对村委资产使用的监管力度和信任程度。 村务决策实现村务决策、重要议题村民投票表决功能,在外务工的村民无需现场参与,通过小程序即可投票表决。同时通过手机问卷,可以进一步了解村民的满意度和看法,有利于提高村委会管理能力。 乡村动态实现全国乡村“朋友圈”,村委会可以发布村务信息、党务信息,实现信息及时公开透明。村民可以发布个人动态、晒话题,通过移动互联网的生活方式连接村庄和村庄,连接村干部和村民。 农技培训实现农村农业远程培训,无需进入实地,利用碎片时间,在小程序上即可学习先进的农业技能,进一步提供农民知识水平和综合素质。 政务民生政务服务数字化下沉到乡村,通过对接当地的政务服务,实现手机即可办理惠民补贴事项的功能,真正做到“最多跑一次”,甚至“一次都不用跑”。 专家咨询借助人工智能,帮助农民通过微信扫一扫即可了解农业相关疑难杂症,同时还引入相关领域的专家资源,让来自全国的专家线上为乡村群众答疑解惑。 乡村医疗借助腾讯医疗健康的技术和能力,将

  • MVVM大比拼小结

    目前完成4篇源码分析文章: MVVM大比拼之knockout.js源码精析 MVVM大比拼之avalon.js源码精析 MVVM大比拼之vue.js源码精析 MVVM大比拼之AngularJS源码精析 分析所关注的点集中在:双工绑定的实现机制、视图编译等几个关键点。建议读者从knockout开始按顺序阅读。关于性能测试,vue的作者已经做过了,在这里。 之后的文章将关注一下各个框架在repeat指令下的实现。另外准备再深入介绍一下bacon.js,从另外一个角度看数据与视图。

  • 高级前端工程师面试必备(持续更新中)

    高级前端工程师面试必备(持续更新中) 面试汇总一:2018大厂高级前端面试题汇总 高级面试:【半月刊】前端高频面试题及答案汇总 css内容 响应式布局 当前主流的三种预编译器比较 CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用; 让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。 less,sass,stylus三者的区别 1.变量: Sass声明变量必须是『$』开头,后面紧跟变量名和变量值,而且变量名和变量值需要使用冒号:分隔开。 Less声明变量用『@』开头,其余等同Sass。 Stylus中声明变量没有任何限定,结尾的分号可有可无,但变量名和变量值之间必须要有『等号』。 2.作用域: Sass:三者最差,不存在全局变量的概念。也就是说在Sass中定义了相同名字的变量时你就要小心蛋疼了。 Less:最近的一次更新的变量有效,并且会作用于全部的引用! Stylus:Sass的处理方式和Stylus相同,变量值输出时根据之前最近的一次定义计算,每次引用最近的定义有效; 3.嵌套

  • PyTorch从入门到放弃(目录)

    目录一、前置基础(选看)二、Pytorch引入三、Pytorch搭建神经网络流程四、Pytorch的Tensor操作五、Pytorch的autograd操作六、Pytorch的nn工具箱七、Pytorch中常用的工具八、Pytorch实战九、AI插画师:生成对抗网络(GAN)实战十、AI艺术家:神经网络风格迁移debugging……推荐阅读 Pytorch从入门到放弃 一、前置基础(选看) 0101-Python从入门到放弃(目录) 0102-人工智能(目录) 0103-numpy模块 0104-DeepLearning-图像识别(cnn流程架构) 二、Pytorch引入 本章更多的是对torch的发展史的简单阐述。 0201-PyTorch0.4.0迁移指南以及代码兼容(选看) 0202-pytorch和tensorflow的区别 三、Pytorch搭建神经网络流程 本章将会带你站在一个高的角度来看torch这个框架,其中细节你可能有些看不懂,但是没关系,后面会把各个细节逐一攻破。 0301-利用numpy解决线性回归问题 0302-利用pytorch解决线性回归问题 0303-利用

  • 桐影314第五周讨论总结

    本周桐影314的伙伴们又进行了激烈的讨论。 讨论议题:计算机操作系统。 问题:1,最差匹配是什么意思?有什么意义? 答案:最差匹配能留出最大可能的的空白内存区域,在动态分区中这种方式常常是最有用的。  

  • 用I/O口模拟总线时序

    在做总线通信过程中,我们很少会用到这样方法,一般在我们选择MCU的时候都会带有你所需要的通信接口。但是,对于一些简单的通信应该用的场合,一般在一些传感器的数据通信过程中,传感器厂商会将通信协议做一些改变,这些通信协议也没有一个标准的协议规定。以至于传感器的兼容性很差,甚至有时候找不到能够与其通信的MCU,这个时候有一种方法就是用I/O口来模拟通信总线(由于I/O速度的限制一般只适用于低速的通信总线)的时序。之前,用I2C通信做一个温湿度测量的工程,本篇文章就以一个例子来看看如何用I/O口对总线时序进行模拟。 我们平时计算机常用的RS232/485工作在异步工作状态时是有严格的数据时钟限制,也就是我们所说的波特率,通信的两个设备有相同的波特率才能正确的通信。对于同步通信一般没有严格的时间限制,总线通过高低电平来分辨数据是“0”还是“1”,有两个关键的时刻:上升沿,下降沿。它是用过上升沿和下降沿的时刻来读写数据的,也就是说这样的话通信频率不是固定的,因为通信的设备“数”的是上升沿和下降沿的数目,然后读写数据线上的数据。笔者做过实验,将I2C通信的频率降到了10Hz左右,这样用示波器能够很好

  • Coffee Chicken

    CoffeeChicken 字符串斐波那契 输出第s[n]个字符串的第k位及后十位 暴力算出前20项,超过20,跑dfs #include<bits/stdc++.h> usingnamespacestd; strings[1000]; typedeflonglongll; lln,k; llA[500]; string_s[100]; voiddfs(llk,intx,intlen)///k开始位置,x这一段是由哪个字符串拼接成的,k后取len位 { if(x<=20) { for(inti=k-1;i<min(A[x],k+len-1);i++) { cout<<s[x][i]; } return; } if(k>A[x-2]) { k-=A[x-2]; dfs(k,x-1,len); } elseif(k+len<A[x-2]) { dfs(k,x-2,len); } else { dfs(k,x-2,A[x-2]-k+1); dfs(A[x-2]+1,x-1,len-A[x-2]+k-1); } } intmain() {

  • 安装Mariadb+Apache+php

    安装mariadb 1、提升权限 suroot复制 2、安装mariadb-server yuminstallmariadb-server复制 ​ 3、配置mariadb 开启服务 systemctlstartmariadb复制 设置为开机启动 systemctlenablemariadb复制  如图 ​  进行数据库的配置 mysql_secure_installation复制 可能嫌我密码就一个字符,让我把密码换了换成了root   如下图为详细的过程 Entercurrentpasswordforroot(enterfornone): #输入数据库超级管理员root的密码(注意不是系统root的密码),第一次进入还没有设置密码则直接回车 Setrootpassword?[Y/n] #设置密码,y Newpassword: #新密码Re-enternewpassword: #再次输入密码 Removeanonymoususers?[Y/n] #移除匿名用户,y Disallow

  • git checkout命令详解 git checkout feature/test123

    gitcheckout命令详解gitcheckoutfeature/test123//切换到feature/test123分支保证当前分支没有修改提交,否则回提示error:Yourlocalchangestothefollowingfileswouldbeoverwrittenbycheckout: 在实际应用中,gitcheckout是最为常见命令之一。html 此命令参数众多,功能多样,但有些功能可能整个职业生涯都不会用到,因此本文只介绍最为实用的部分。git 若是想要了gitcheckout命令全部功能,能够阅读帮助文档:spa  复制 [Shell]纯文本查看复制代码翻译 13d $gitcheckout--helpcode 一.命令概述:htm 众多教程将此命令翻译成"检出",好比检出某分支。blog 因为本人英文水平有限(良心话)不能理解它的含义,固然这也不是咱们所深究的重点。教程 做用综述以下:ci (1).切换或者新建分支。 (2).将暂存区或者指定commit内容覆盖到工做区。 此命令整体功能大体上述两条,固然因为参数的不一样,功能在细节上会

  • TJOI2016(8.11~8.12模拟赛)

    一P4092[HEOI2016/TJOI2016]树 题意: 有以下两种操作: 标记操作:对某个结点打上标记。(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。) 询问操作:询问某个结点最近的一个打了标记的祖先。(这个结点本身也算自己的祖先) 做法: 并查集。 先把所有节点标记添上来,接着倒着删除,如果删到\(0\)了就将其并查集父亲指向其树上的父亲。 code: #include<bits/stdc++.h> usingnamespacestd; intn,nq; constintN=1e5+8; intfr[N],to[N<<1],nxt[N<<1],too=0; intfa[N],ff[N]; intq[N][3]; intp[N],ans[N],nn; voidadd(intx,inty) { to[++too]=y; nxt[too]=fr[x]; fr[x]=too; } voiddfs(intx) { for(inti=fr[x];i;i=nxt[i]) { inty=to[i]; if

  • 聊一聊认知偏见

    和我的一些读者私底下交流,一个很常见的误区就是他们经常会认为我是一个理性,客观,逻辑清晰,遇事能做出正确的决定的“大佬”。虽然我也想成为这种人,但事实是,我们的大脑在你不知不觉的时候帮我们做了很多决定,我们一直处于认知偏见的影响之中。这些偏见会潜移默化的扭曲我们的思维,影响我们的判断和决策,认知偏见本身无法避免,但可以减少。说说常见的几个认知偏见。确认性偏差《吕氏春秋》中有一个疑邻窃斧的故事:从前有个丢了一把斧子的人。他怀疑是邻居家的儿子偷去了,观察那人走路的样子,像是偷斧子的人;看那人的脸色神色,也像是偷斧子的人;他的一言一行,一举一动,无一不像偷斧子的人。后来,丢斧子的人在山谷里挖水沟时,掘出了那把斧子,再留心察看邻居家的儿子,就觉得他走路的样子,不像是偷斧子的;他的脸色表情,也不像是偷斧子的;他的言谈话语,更不像是偷斧子的了,那人的一言一行,一举一动,都不像偷斧子的了。确认性偏差是指:一个人,一旦形成了某种确认的观念和观点,就会下意识的去寻找支持自己,或有利于自身信念的证据,甚至为了佐证自己的见解,不惜扭曲新的证据。这种先入为主的做法,会让他们在偏见的路上越走越远。确认性偏差在我

相关推荐

推荐阅读