00:00
刚刚呢,我们说了这样一个练习对吧,让我们来定义这么一个类啊,来表示这个,哎,狗的类啊狗的类,那定义类的格式其实已经给大家了,那我们只需要按照格式去定义一下就OK了啊来,那在这里我来创建一个文件保存一下,嗯,我来放到我们的这个code里,我叫做一个零四。嗯,我们这么一个叫做练习,嗯,那在这里我们既然要定一个类,那首先我们的是我们的关键字class对吧?那你会发现在我们的这个sub LA里边,你直接输一个class,你在这有一个选项叫new class,如果你选中它的话,你在你可以上线去选对吧,你选中它的话,直接一敲回车,这个时候它是不是会给你一个这个类的一个模板呀,诶类的一个模板,那这样它可以简化我们一个创建的一个过程啊,创建一个过程,那这块呢,我们还是先不用它吧,因为它里边涉及到一些东西,我们还没有说到,所以现在我们先不用它啊,我们先不用它,那我们直接来写class,后边跟的是我们的类名,我们的类名我们叫什么呀?叫到啊,既然是一个狗的一个类嘛,啊,狗的类,然后在这我们其实和我们这个函数一样,在我们的类下边也可以跟着一个文档字符串啊这个是什么呢?诶这是我们这个表示一个什么呀?诶表示狗的一个类啊,表示狗的一个类,那这个类定义完了,然后在这里边我们是不是要先。
01:21
创建我们这个哎魔术方法我们叫做一个阴对吧?哎,我们的这个ne,呃,直接来一个def DeFine啊,当然你这选中的话,DEF它这块也会有一些提示是吧?在这有一个这个defense,就是定义一个这个方法,你看它写了叫做一个method对吧?Method你可以选中它,然后按回车,那这样它就会给你出现一个什么呀,一个这个方法的结构,或者你不用它,你直接在这去DEF直接写也OK啊,也OK,那我们这个叫做一个什么呀?哎,In it,我们的这个魔术方法啊魔术方法,然后in呢,后边我们这儿是不是就是我们这个函数体了,哎,我们这个方法体啊方法体,然后那既然是个方法,在这毫无疑问我们需要一个什么呀?诶,一个这个呃,Self作为参数啊,Self作为参数,那这个self定完了,我们这儿来看一下,我们这儿需要呃什么东西,那首先我们这狗类里边需要什么呀?Name age粘还有一个headde对吧,还有一个head,我们叫做一个身高啊身高,那在这儿我们来看一下。
02:21
那既然我们来,我把这过来吧。狗类需要这么多的这个属性啊,我先粘过来,那这里边注意了,之前我们写的时候,我们类里边只有一个name对吧,现在有了四个了,四个怎么办啊,四个非常简单,在这里边干嘛呀?哎,按顺序给它列出来啊age,然后这是一个粘的,然后这是一个什么呀?哎害是不是你把这四个全都列出来啊,诶列出来以后这就不需要了,那现在就是说我们这几个值是不是都是通过参数给传进来了,那接下来我们再来写,直接来一个什么呢?诶self点一个name等于name,也就是说我要把这些name age粘的这些值是不是赋值给我们当前对象啊,哎,然后这来一个self点一个age等于H,然后这接着写S点一个这个沾等于沾啊性别,然后这是一个点,一个这个hat等于hat它的一个身高,那现在我们这个音译它是不是就定义完了,哎定义完了,那我们现在可以尝试用它去创建一下啊,我们先使用一下,直接来一个D诶等。
03:26
于一个这个什么呀?哎,等于一个dog,那这个时候我们就需要传参数了,除了self它自己传剩下的name is,我们是不是需要手动传啊,诶手动传,那我来一个,诶这个狗名字叫什么呢?诶叫一个旺财,诶旺财,然后然后他的年龄呢,年龄是八岁啊,然后性别呢,性别我们来一个这个mail male啊mail男的,然后身高呢,身高呢来一个这个,呃来一个这个30万,诶30厘米啊30厘米,那现在我们是不是创建这么一个狗这么一个对象啊哎,狗这么个对象,那在这我们直接来普润一下这个狗直接一执行,诶是不是就创建好了,哎,那我们来看看这些值有没有啊,点一个name,然后这点一个这个edge,然后这儿点一个这个,诶这个gender,呃,然后这再来一个点一个这个什么呀,诶head身高这一保存一执行是不是都有了,哎都有了,也就说对象已经创建好了,对吧,那现在其实我们创建对象,对象有哪些属性,其实在这里我们是不是都是通过这个in译来定义两。
04:26
哎,通过这个音译来定义的,好,那这里定义完了,那接下来我们再来看,那我们说了,我们的这个类里边除了要有属性,那这些name age GE had这些是属性,除了要有属性,我们是不是还要有方法呀?哎,方法,那刚才我们说了,我们在这个dog这个类里边,我们要定义三个方法是吧?什么叫咬,还有跑对吧?我们这个叫跟咬我都是用的这个拼音来写的啊,拼音来写的,那我这直接定义了啊,直接定义了,我们直接定义啊定义的时候在这你也可以直接选择这个method啊method method这我写一什么呢?我们这比如说叫做一个叫啊,这个方法是什么呢?哎,这个方法我们写一个注释,哎,这个是一个什么呀?哎,这是这个狗叫的方法,狗叫的一个方法,那这个方法呢,我们就既然是狗叫嘛,狗叫我们简单点直接print一个,哎,就是什么呀,哎汪汪汪。
05:21
汪汪汪完事对吧?哎,这是叫啊,这是叫,然后下边我们还有一个什么呀,哎有一个叫做哎一个叫做一个,哎狗还有什么呀,还有一个咬的方法啊咬的方法,这是什么呢?这个方法是我们这个狗咬人的方法啊狗咬的方法,一咬咬啊咬的方法,那这里边我们还是就简写了,直接print一个啊print一个哎我咬你啊我咬你,诶不是我咬你是吧,我咬你啊我咬你这个是它,然后这个最后一个我们来一个什么呢?哎丁义一个,丁义什么呀?诶丁义一个我们叫做一个,叫做一个run啊run这个我们就不写注释了啊这个是什么呀?这是我们这个狗跑的方法啊,狗跑的方法,哎,这写一什么呀?诶print一个,诶叫做什么呢?诶狗或者这么写吧,我们直接来一个百分之S叫什么呢?诶,快乐的这个奔跑着啊,快乐的奔跑着写这么一个,那为什么要写百分之S呀,很明显这里边我是要填充,诶填充站位了,哎填充站位了,我们这直接来。
06:21
那个self什么呀?哎,Self点一个name啊,把name给它传进去,那现在我们这个类里边是不是就有三个方法了,哎三个方法了,好,那现在我创建完了这个狗对象,我直接D点一个什么呀,我先掉一个D点,一个叫,让狗汪汪叫一直行是不?汪汪汪就叫了,诶然后在这儿我来一个这个一嗷咬,让狗去咬一直行是不?我咬你啊在这儿我再换一个D点,一个run一直行走,一个不是旺财在快乐的奔跑着呀,来你这换一个名字,我换一什么呀,换一个叫做小黑,小黑是吧?一保存这一执行是不是小黑快乐的奔跑上啊,那这样我们的这个类就已经定义完了啊,这是我们刚才说那个练习啊,非常非常简单,但是这个时候我们这儿定义的音译的时候,我是手动去写的,那其实呢,我们的这个sublime里边也有一些简单的方式,比如说在这儿我定义的时候,我可以直接DeFine,是不是有一个mey,诶我这可以直接写什么呀,你一打印下划线,它就提供这个什么呀,In了,那这个时候呢,这样啊。
07:21
我把这个呀,直接一打下划线,它就会出现这个什么呀,In it啊,直接会出现这个in it,然后它的好处是什么呢?在这后边我可以直接去写啊内幕,然后这来一个age啊,它就是相互的来省点事啊,省点事,当然这里边你自己手动写也没关系,手写也没关系,好那这个练习呢,我们就说这么多是吧,说这么多但是这里边注意了,那现在我们定义这么一个类,非常简单啊,非常简单,一定要注意,我们的类是对我们现实中的事物的一个抽象,你定义类的时候一定不是凭空创建的,就像我们现在这个类基本上是我编的,对吧?那我们真正定义类的时候,你要想,诶,我要一个叫的方法,这个方法我用来干嘛?诶我要一个咬的方法,这个方法用来干嘛,我要一个run的方法,这个方法我用来干嘛?它需要哪些参数,它是不是需要返回值,一定要明确它的作用,这个东西一定要干嘛呀,有意义啊,一定要有意义,那这里边它有没有什么问题啊。
08:18
有没有什么问题啊?哎,我们想一下有没有什么问题,那我们说了对象在这里是干嘛的。对象是干嘛的?诶对象我们说的是我们内存里边去保存数据的一块区域,对吧?那我们用对象干嘛?我们用对象,对象里边去保存数据,并且对象主要作用,它是不是可以替我们干活,比如说我想让狗去咬,我直接递点一个,诶咬就咬了,我想让狗去跑,我直接地点RA,是不是狗就去跑了,也就说对象拿过来,其实它是要替我们去完成某种工作的,完成某些工作的,但是这个时候会有一个问题,那现在假如说我现在创建一个,创建一个对象,哎,我创建一个对象,但是这个对象它是不是一定是我用啊,不一定,可能我创建完这个对象是给别人用的,很有可能我可能给诶别的程序员,他调完了,他在别的地方去用,给另一个程序员,他可能在另一个地方去用,也就是说可能有不同的人去使用这个对象,那这个时候就带来一个问题,那我们想想啊,呃,这个对象就好比是一个人对吧?哎,好比是一个人,好比是一个我手底下的人啊叭,假如说他是我的一个员工。
09:26
我现在把我的员工借给你,你拿我的员工去到你那儿去干活。对吧,诶,你拿我的员工去到你那干活,你说你让他去给你搬砖也好,去给你扫地也好,去给你擦玻璃也好,这些东西都可以干,对吧,只要是他能干的活,我绝对都让他干,但是有什么东西是不行的。有什么东西是不有呢?哎,比如说我这个员工名字叫张三,张三我把这个东西给把这员工交给你,让他去给你干活了,但是这个时候呢,他回来以后,你把他名儿改了,回来以后他不叫张三了,他叫李四了,那这个是不是非常的不合适啊,也就说你可以让他去干活,但是它里边的这些数据你能不能去改呀?哎,那我们说了,有的是能改的,但是有一些数据我们是不是不希望你去改呀,哎,不希望你去改,所以现在来看,我们在这里创建了一个D,等于一个do,一个小黑,对吧,这个东西我们创建完了,创建完了,但是现在这个东西诶。
10:27
先说能不能改,能不能改,比如说在这儿我直接来一个D点一个这个name等于一个这个阿黄,阿黄,那现在我是不是在直接给这个变量进行赋值啊,诶直接给这个变量进行赋值,那这个时候我再调用run,因为run里边是不是打印成name了,这时候name变变成阿黄变变成阿黄,我这一执行说阿黄快乐的奔跑了,也就是说我现在可以什么来说一下,目前来我们可以直接通过我们这个对象点一个什么呢?哎属性的方式,哎,来修改我们属性的一个值啊来修改属性的值,那注意了,这种方式它非常的不安全,这为什么不安全,诶这种方是什么呢?诶这种方式导致导致我们这个对象中的属性可以什么呀,可以随意修改啊,可以随意。
11:28
就改非常的不安全啊,非常的不安全,也就是说我这个对象创建完了,你拿过去你想改,你咔咔咔你就改了,给你给给张三,张三想改咔咔咔张三又改了,我给李四,李四咔咔又能改,你说我这个对象太不值钱了,为什么不值钱,谁过去都能改一下,谁拿过去都能改一下,那这样是不是导致我这个数据的安全就就下降了,本来我这儿之前是小黑呢咔,你这一改变成阿黄了,那这样是不是就不太好啊,如果我这个数据非常重要,而又被你去改了的话,那这时候是不是出问题了,发现说同学说了,你这阿黄改就改了呗,没问题啊,改个名怎么了?对这个名是没问题,那有的时候是这样的,我来一个d.age等于十干嘛了,他是不是改变我这个狗的年龄了,直接print一个地点AGE1保存走一个十改了对吧,改成十了,同学说改年龄也没问题啊,但是注意它有的时候是这样走一个干嘛了。
12:28
是不是把年龄改成负十了,哎改成负十了,那这时候一看我这狗多大了,负十岁,那这个值还有效吗?哎,它是无效的啊,它是无效的,所以这个时候为什么说它不安全,为什么说不安全,因为什么?因为值可以任意修改,可以任意修改,哎不论什么呀,哎不论这个对错,也就说你把这个名字改成年龄,你把年龄改成名字,你把年龄改成副值,你改,你把性别改成一中性,这时候都是可以改的,因为我们现在在这儿对修改属性是不是没有任何限制,哎没有任何限制,所以这个时候我们的数据实际上是不安全的啊,实际上是不安全的,那你在做完这个练习,你要想一下诶。
13:17
我能用什么方式来增加我数据的安全性,安全性主要什么呢?哎,我们那我们需要什么呢?那现在我们就需要诶一种方式来干嘛呢?诶来诶来增强我们这什么呀,哎,我们这个数据的一个安全性啊,安全性什么安全性安全性有什么?诶第一个我们的数据干嘛呀?诶数据不能随意修改,什么叫不能随意修改,也就说什么呀,哎,我让你改,你才能改,你才能改,哎不让你改,哎你就什么呀,你就不能改啊,你就不能改,你就说你能不能改得我说了算,不能这么轻易的让你改了,因为数据太不安全了,这是第一个,然后第二一个什么呀,诶数据修改,数据修改时啊,或者说我们这个不叫数据了,我们叫属性对吧,属性属性不能什么呀,诶。
14:17
不能修改,为什么呀?诶修改为任意的值啊,不能修改为任意的值,比如说什么,比如说我们年龄不能什么呀,哎,不能是负数啊,不能是负数,也就说你不能什么值都给往里传,对吧?年龄不能是负数对吧?哎,你不能是是是错误的结果啊,错误的值,你这性别你只能是男或者女,你不能出现别的值对吧?那这些是不是都是我们的一个限制,哎,所以这里边我们说的安全性问题,第一个你不能随便改,你不能说你想改你就改,你不想改你就不改,我而应该是什么呀,你能不能改应该由我来决定,我让你,我让你改你才能改,不让你改你改不了,这是第一个,第二一个你让你改了,你改的值还不能随意修改你的值,必须得符合法啊,是一个有效的值才可以,对吧,那我现在要实现这个事儿要怎么做啊,要怎么做,把这个练习没写出来的自己写一下,然后思考一下这个问题,怎么能确保我对象中的数据,也就是我对象中的属性是安全的?
15:17
不能被外界任意来修改啊,任意来修改好,这里我们先来听一下。
我来说两句