00:00
同学们大家好,那么这一小节开始,我们继续为大家讲解魔术方法啊,还有很多要讲的,那么本小节要讲的魔术方法全都是与属性相关操作的,所以我们在里边给大家新建一个文本文件,行不行?来右键新建一个文本文件。我们写上啊魔术方法,依然是魔术方法啊来魔术方法,然但属性相关。属性相关,我们之前讲的魔术方法都是属于什么呢?常用的就是跟不能说跟属性没关系吧,应该说是什么呀,每个类里边,或者我们在开发过程当中经翅使用到的一些某种方法,那么这个时候呢,我们要讲的是全都是与属性相关的某种方法,什么叫属性相关某方法呢?属性相关魔术方法其实理解起来也不难啊,属性相关的魔术方法。所谓属性相关的文化就是指就是指什么呢?与就是获取成员属性啊,获取成员叫删除成员,修改成员,修改成员相关联的魔术方法而已啊,他们也是魔方,只不过他们的什么呀,专门对于成员的操作有效而已。
01:17
然后呢,在这里边啊,属性相关的魔术方法呢,倒也不多啊,倒不多,一共需要给大家讲五个就可以了,好在这里边哪五个魔术方法呢,我给大家列出来啊,五个五个属性相关的魔术方法。五个与属性相关的魔术方法。相关的魔术方法哪五个呢?第一个叫做下滑下限啊,叫做还是双下限开头啊,叫get at tr啊,然后下线,下线结束啊get不就获取吗?At tr其实就是属性英用单词attribu的缩写,然后呢,第二个是什么呢?第二个是set atr啊set at tr,下线下线,然后第三个的说,那是不是应该delete at tr了,嗯,说的对,下划线下划线DLADR啊下划线下划线d LA tr啊,下划线下划线,然后呢,下一个是什么呢?下一个是我们叫完整的叫get attribute啊,这是三啊三。
02:26
第四个叫做get下下划线下线get a tr ibu,下线下线简单的说啊,这个操作其实是一个什么呀,和上面操作很像,因为后面这个单词啊,Attribute就是这四个字母的一个完整版啊,但是他们其实两个不同的模声啊,至于为什么我们一会儿再给大家讲解,还有第五个啊,第五个魔术法叫做下线下线Di。点小心小心啊,好了,这是与属性相关的魔术方法,在讲属性相关魔术方法的时候呢,我得给大家介绍另外一个东西,什么东西呢?叫做属性访问的顺序啊。
03:08
属性访问的顺序。熟悉网的顺序,这个顺序呢,就是当你获取一个对象的成员的情况下,他会按照什么样的优先级来找数据,比如说对象有就不找类,是不是类,有就不找负类等等等等这么一个访问的顺序,这个顺序我给大家总结了一下,当然大家在网上一般是找不到这种总结顺序的啊,给大家总结顺序啊,首先呢,他会怎么找呢?它会使用,它会先查找当前对象中的get a get。At啊,它的魔术方法。然后呢,这是第一种,第一个调用就是先看看它有没有,有的话先调用它,没有的话怎么办呢?没有的话它会调用啊,调用数据描述符。数据描述符,很多时候啥玩意叫数据描述符啊,这个别着急,讲完描述方法,我会给大家讲一下描述符的相关信息行不行,但是我们现在用不上,也不用太在太在意啊,第三个是第二什么呢?第用我们当前对象的。
04:15
成员或者当前对象的成员啊,要调用当前对象的成员,或者当前对象的所属成员更好点啊,所属成员已经是这个当前对象有的,然后呢,如果你看前面这三个什么意思啊,就是我访问的时候先找这个有没有这个模方法,有的话执行他要数据,没有这个会找描述数据描符要数据,然后数据描述符如果也没有的话,那我就找当前对象要他的成员,如果当前对象啊也没有的话,怎么办呢?OK,开始找到我们类药啊,它就调用类的所属成员,这是这是我们之前说的啊,对象没有会找类要对不对,然后呢,如果类也没有这个成员怎么办呢?OK,类也没有这个成员的话,他会什么呢?他会找非呃,它会调用啊非数据。
05:08
非数据描述符,描述符很多,说啥呀,就出来个非数据描符,这两个请你忽略啊,其实我也不太想放这再讲啊,你现在可以忽略这两个,剩下你都认识,如果说是数据描非数据描述也不存在,怎么办呢?这个时候它会找副类药啊,它会调用负类的所属成员,哎,写错了就负类的所属成员,如果负类也没有的话,那怎么办呢?那么这个时候它会调用一个新的魔术法啊,叫调用。下划线下划线get at tr下线下线get at tr下线下线给大家列出来的这个步骤,其实就是当我们访问某一个成员的时候呢,他的一个查找顺序,如果前面这一步有,他就不会往下走,也就是说他们的优先级是逐渐降低的,明白了吗?所以在里边啊。
06:07
哎,这个往前这个往前点啊,这怎么缩进没缩好是怎么的。好,然后呢,在这里边注意啊,需要注意。注意注意以上步骤,以上步骤是什么呢?是对象调用某个成员啊,调用某个成员的访问顺序及优先级。优先级大家可能这个时候可能还不太理解啊,不过你也不用太担心,因为我这只是告诉大家一个顺序而已,然后呢,接下来啊,需要注意的是什么呢?一旦啊,且且交了前面的叫做。一旦啊前那这这写不到啊,前面的能获取成员啊,就不会向后查找,简单说呢,就是第一个能找到数据就不会问第二个要,第二个能找到就不会找第三个要以此类推,也就是说如果你想就是用第七个来获获取重来的话,一定是前六步都不通了,明白吗?就是一个个测试的。好了,有了这个顺序之后,下面我们就可以来研究一下这几个与属性相关的魔术方法啊。好了,大家来看先看第一个魔说法gettm方法啊。
07:31
呃,先看行,先看这个吧,好,先看get at tr魔术方法,咱解一下来学魔术方法老规矩依然是五个东西啊,一个是触发时机,对不对,一个是什么呀,叫做作用,一个是参数,一个是返回值啊,返回值一个是注意事项。一个是注意事项,就这么五个数据啊好,然后呢,为了测试我们get at tr的操作,我们在这里边给它新建一个文件行不行,然后呢,在这魔术方法里边右键新建一个方法啊,不是方法一个文件啊,下线get。
08:12
At t啊好,然后点击OK创建成功,这个时候呢,我们干什么事呢?我们在这里边给大家啊,新建一个类,或者叫声明一个类啊。声明一个类,随便什么类就可以,我们声明一个人类行不行,Hum ma声明一个人类,然后在人类里边添加一些成员属性和成员方法,添加成员属性以及添添加成员方法,然后呢,干什么事儿呢?来成员属性注意看啊,我加到对象里边啊。加入对象啊,都说不加对象行不行啊,也行啊,但是为了测试我们这个操作,给大家加到对象里边,那既然要往对象里添加成员,自然需要到构造模式化init或者叫in,好他括。
09:04
然后呢,我们加几个成员,比如说加一个名字吧,Subject name等于啊什么名字,比如说张三对不对,李四吧,李四。差也可以啊,然后四啊点six等于男。等于啊来,然后surf.h等于18行,就这样就可以了,然后方法呢,我们也随便加几个EF,比如说加一个呃,吃的方法啊,Eat print。啊,我叫做什么呀,一天三顿小烧烤。好。然后呢,再来一个EF,好,我们再来一个喝吧,Drink我们写上啊。叫做喝啤酒啊啤酒。好搞定,就这样就可以了,然后干什么事呢?实例化一个对象看好了,我们实例化对象啊十。
10:04
例化对象这个简单,比如说我们说理四不是吗?等于我们的Hun人类,好,这个时候我们打印一下LS变量,看看里边是不是一个人类的对象,右边运行程序。啊,确实是一个人类的对象没有问题,对不对,好了,这个时候干什么事呢?我们再做一个操作,教大家一个操作干什么事呢?看好了,就是访问对象的成员名称,或者叫访问对象成员属性都行啊。叫访问对象的名称啊的名称怎么访问呢?很简单,Print,这不就在访问吗?S点我们的名称,名称叫什么来着啊,叫name好吧,然后右键运行程序。大家就会发现李四的名字是不是打印出来了,好,这个情况下我们打印出来的数据,然后呢,注意啊,如果说我希望用户在访问数据的时候,我不给他这么完整的数据,而是将数据进行一定的操作处理,甚至是隐藏,然后再给用户,怎么办呢?来看一下这个顺序。
11:07
在我们的属性访问顺序里边,如果他找当前对象成员,前面会经过两个步骤,对不对?会经过谁呢?会经过get attribute和描述符,描述他还没写错,也不用管,那么这样的话,我们其实可以使用get attribute来限制对象成员的一个访问操作。老师,这怎么限制啊,给大家看看。好,返回这个代码里边,我们在这里边加上一个魔术方法啊。添加叫添加魔术法。添加魔术方法,然后呢,干什么事呢,Get。写错了,Get下线啊,什么下下下线下线get at t下线下线。好了,然后呢,我们来写上去DF啊,下线下线get at t hb看没有在这摆着呢,然后呢,我们print看一下有没有被触发,记得来写上get at t被触发。
12:10
好,我们来运行程序。大家看到了,Get at被触发了,而且大家注意啊,我访问的这个成员是已存在的成员是内是不是存在的是不是,所以大家会发现它真的是触发了。看见了吗?啊,好多说为什么获取不到数据了?你之所以打印不出来数据,是因为你的操作被谁呀?被前面这一步给截断了,Get attribute截断了你的操作,它的返回数据将会成为你最终的数据。所以右键运行程序,运行程序你看是不是999,当然也不是说非得字符串啊,你给整形也没关系。来右键运行。是不是999我说过嘛,我们按照之前的访问顺序,要想访问对象成员之前,他一定会先访问get attribu吧,是不是,所以你会发现,哎呦,我访问一个对象的时候,先访问了他,所以你访问对象就体会触罚他。当然兄弟们也会有疑问说哎,我访问的对象是存在会触发还是不不存在会触发还是无所谓,都会被触发,你在里边随蒙一个内蒙,二来右键运行程序。
13:15
看见了吗?是不是依然被触发啊,所以我们get attribute的操作或者叫触发时机非常简单,当你访问成员的时候就会被触发,无论这个成员是否存在啊,所以记住这个操作啊,它的触发时是访问对象成员时即可触发啊,访问对象成员的时候就会触发,而且无论。无论我们的写错了啊,无论对成员是否存在啊,成员是否存在,我管你在还不在,只要访问成员属性我就会触发是不是,然后我们好多说这有啥作用啊,好,你看我们既然在访问对象的数据之前触发了这个,我们就可以对对象的数据进行一个处理之后再给用户,就比如说我们去医院啊,大家去医院的时候经常会发现医院现在都有叫号系统了,对不对?
14:09
你会发现门框上写的是不是小雪,是不是啊,下面是五号患者小雪,六号患者是不是王二麻子等等等,但是大家会发现一个问题,什么问题呢?医院显示的叫号,它不显示完整名称,医院啊,写错了一院。叫号显示啊,叫号显示他是怎么显示的呢?如果这个人叫做张三。他反它显示的结果是什么呢?是张星三。如果他叫什么呢?如果他叫李。李大嘴行不行?如果他叫李大嘴,他的返回数,他的访问的结果或者显示的结果就是李心嘴。里啊心嘴。
15:02
也就是说无论你叫什么名字,怎么操作,医院不会把你的名字直接显示在我们的什么,这个叫做面板上啊,防止个人隐私泄露嘛,所以他会处理之后再显示,显示的时候通通是在中间的数据加信号,对不对?那我现在也希望对于用户的隐私做一些处理,那怎么办呢?很简单,当我们访问用户名称的时候呢,我们可以什么呀,直接返回用户的名称,呃,怎么返呢?S self嘛,S。这个时候注意,当你打印对象名称的时候,他返回的应用对象的本名,李思。来右边运行一遍,看到没有,哎,写错了。哪块写错了,我来看一下啊。好,大家会发现报错了,而且这个错误会很奇怪,大家发现没有会很奇怪啊,都是真的有点奇怪了,好,我告诉大家真哪奇怪啊,他说了一个什么最大递归次深度是不是什么意思呢?实际上我们这里边触发了递归操作,这哪触发递归操作我没看出来呀,请你看好啊,我们get attribute触发时际是什么?还记得吗?啊,访问对象成员的时候,那你看好了,我们在这里边通过ls.name触发了get attribute,对不对?
16:20
触发它之后呢,返回数据的时候,又访问了对象的名字,那是不是又触发了自己,因为只要适应什么,只要是对象的成员就会触发嘛,不是,所以你在这里边又触发了自己,怎么办呢?于是啊,我结果就这样,Alex name触发get atri,然后返回的时候呢,又触发了他自己,然后又又触发了自己,又进来,又触发自己又进来,又触发又进来,一直到程序到达最高深度,就是不能再递归了为止,所以你想返回用户数据的时候呢,这一步啊,不可以这样来完成,因为这样完成的话,你会自己触发自己嘛,是不是很多说那怎样才能避免这个东西,而且我还能获得用户的名称呢?很简单呀,来看好了。
17:04
把这个提取出来。我们访问名称的时候。怎么访问呢?借助我们万能的上帝之手,Object点向前,向前。我不这点小气小气get,写错了啊get。也就是说我们正常的对象里边本身就有刚才这笔的,我们要想什么呀,要想。获取原有某一个对象的数据,实际上都是借助object get程AB的进行操作的,是不是?那现在我们在这里边出现了一个问题,就是啊,你自己对象的成员,然后呢,触发了get才视频上如果你还用自己对象SF来访问的话,Elf点盖这个叫什么name的话,那又触发了自己,因为只要是访问了对当前对象的成源,一定会触发自己,是不是啊?所以为了避免这种递归触发,我们干了什么事呢?我们在获取数据的时候,不用当前对象获取,而是用我们当前对象最顶层的负类,也就是说object get来代为我们获取成员就可以好的获取什么成员呢?
18:10
你要获取,不要获取,那么这个时候我们就可以拿到它的结果了。看见了没有,因为我们获取当前对象成员的数据的时候呢,用谁来获取的呢?哎,写错了这块,这块我们如果用自己会递归,但我不用自己干什么事呢?我用,当我用最基本的获取方法,然后把当前对象传进去,同时把我们要的名字也放进去,那么object最原始的获取方式会从当前对象里取出数据,那这样的话就不会触发他自己的数据了,啊不是不会他触发当前对象的get HP的方法了,那这个时候就不会有问题了。来result给大家看一下有没有问题啊,来右键运行,大家看一下是不是拿到了李斯,看见了吗?这里边最关键的就是这一步,一定。一定不能使用当前对象。
19:04
的成员访问,的成员访问,因为会触发自己啊,会再次触发当前魔术方法,进入递归循环啊,进入递归循环。循环,然后就卡死在这儿了,所以为了避免卡死,我们在获取当前对象成员的时候,不要他自己来获取,而是找我们最就是pth底层最基本的获取对象成员的方式,也就是说白了,Object里边有一个get,你只要给我个对象给我成员,我就可以帮你获取,到这个时候我们就不用这个,因为用你用当前对象自己的获取,肯定会触发自己嘛,所以我用object来帮我获取,明白了吗?这是一个非常重要的步骤啊,好,获取了之后啊,干什么事儿呢?诶,你就可以对你获取的数据进行处理了,比如说啊,叫做隐藏用户名。隐藏用户名,你想获取,没关系,我把你的用户名换成星星是不是,那我们不是说了把中间变成星星吗?是不是,那怎么做呢?Result无非就是一个字符串啊,所以我们可以在这里边叫做new name就等于result中括号零很多,说什么叫零啊,第一个字符嘛,加上。
20:18
Result中括号。负一是不是最后一个,然后在两个之间我加一个信号就可以了。这就是医院那个显示屏的一个处理方式啊,返回的时候再返回牛内吗?给大家看一下结果,它的返回结果一定是离心丝啊,右键运行程序。看到没有,李星词,无论你叫什么都一样啊,你比如说我叫做我叫做奥利奥吧,我叫奥利奥。我叫奥利奥,没关系,他返回的一定是奥新奥。看到没有?他说,那我要叫西门吹雪呢,你叫东风不败都没事。叭。如说东。方不败,没关系。不败啊,不是不拍啊,东方不败没有关系,你用这种操作,他获取的结果是东西败,看到没有,东方星败,他一定会帮你把数据隐藏了,看见没有,这就是get attribute可以用来限制我们什么呀,城揽的一个。
21:14
呃,获取的一个结果是不是可以做一些隐秘的一些操作啊,对不对,这就是我们get才这魔术方法的作用,这里边唯一要注意的就是千万不要在这里边用S点啊name来访问,这是不可以的,因为会再次触发自己嘛,所以要接受object操作。另外的话,很多人这个item还没说是啥呢,是不是很简单啊,你不是要访问对象的某个成员吗?其实在这里边大家可以看一下啊。Print框框,这个item是谁啊,其实你可以写别的名,Item是谁,这个参数你可以随便改啊,这个item其实你看一下字串你就知道是谁呀,就是你要访问的那个成员名称字符串,或者者成员属性的名称字符串,你要在你看我在这边如果不访问他的name而访问six的话,没关系啊,那这个时候他就看上,你看好了,他就得到的item就是一个six了。
22:04
你这个item是不是six了,所以说item接收的是谁?It,他接收的是访问成员的名称字符串而已。字符串,那说这个有啥用啊,有了这个字符串你才能知道访问哪个成员吧,而且在这里面咱也不能固定写name呀,对不对,我可以干什么事啊,把item参数直接传过来,这样一来的话,诶,你方name我就传这里边告诉你object,你帮我在当前的这个对象里边找出叫什么呀,Name的成员名称的值就可以了,然后后面怎么处理,这是用户的操作啊。这是你的操作,然后返最后一个是返回数据了。返回数据看见了吗?这就是我们get atri魔术方法,然后在这里边它的触发时机,我们写了它的作用就是可以啊,可以在用户。
23:01
写错了,叫用户获取数据的时候进行数据啊处理等操作。判断也行啊,处理也行啊,它参数有吗?一个self有第一个是一个self,这个是自带的对不对,接收当前对象第二个参数,另外一个啊,另外一个参数,它接收的是访问对象成员名称的字符串法规制有没有。有啊,返回知识有很多时候没有行不行啊,没有到不会报错,但是返回一个那啊不设定啊,它返回呢。然后注意事项是真正存在的。什么注意事项呢?在。当前魔术方法中禁止使用。不住这样。叫禁止写错了啊,叫禁止使用哪个操作呢?当前对象点。
24:05
成员。点成员的方式访问成员,因为会触发递归操作。会触发递规操作。必须必须借助我们object的。下线下线啊,Get at ti b下线下线来什么获取当前对象的成学,就他自己干不了的,你必须借助object,这样才能完成这个操作啊,这就是我们get,呃,写错了at加it get attribu的操作,而的魔术方法的一个应用啊,这个模方还是比较大的,对不对?好了,那这个get attribute讲完了之后呢,我们其实还有是不是这是四个属性相关的,是不是我们再接着往下讲行不行,下面来给大家讲一下什么呢?Get at tr模式方法。
25:06
好了,然后呢。我们在里边新建一个新的文件,右键新建一个文件啊文件。是不是上次文件写错名了哦,上次这个文件写错名了吧?Get attribute,这个应该写成get attribute,不需要get,我怎么给他改改改改吧。把这个改一下啊,我们这块写的是get attribute。把这个稍微改一下好吧,来右键。修改名称。给没写啊。At t BT。好修改成功,然后呢,再接着来讲其他的啊,再讲一下这个吧,Get。来这里面我们右键新建一个文件啊,文件我们写上。我下线get at啊,这个是at啊,上一个讲的是H对不对,嗯。
26:00
好了,然后呢,在这里边我们依然要定义一个类,什么类呢?人类这咱就不重复了,行不行,就把刚刚这给大家复制过来,好吧,把刚刚这个给它复制过来,然后把它的魔术给删掉就可以了啊。把这个魔法给删掉。好,这样一来的话,我们又得到了一个操作,嗯。好,然后呢,接下来啊,接下来然后呢,在这里边我们实例化一个对象。好,我们在里边不叫叫东方,什么东方啊,这个叫做呃,东方,OK,东方就直接等于我们hum human是化一个对象来答一遍,看看我们的对象是否正确,东方右键运行程序。好,大家发现没有问题,是不是是可以使用的啊,而且对象也存在,然后呢,在这里呢,我们看一下get at tr方法到底干嘛用的呢。来,在里面我们加一个魔术方法。魔术方法,然后呢,嗯,魔术。
27:02
方法方法来EF。下线下线get at t get at tr好,下线下线啊。画上夸。然后呢,这个时候我们在里边也写一句话,看看有没有触发行不行,Print套上括号,我们写上字符串,里边get a可以触发。方法被处罚好,然后呢,我们在这里边干什么事呢?实例化对象已经有了,是不是,然后我们访问对象成员,访问对象成员好,访问对象成员的时候呢,我们依然这么来玩。怎么玩的好?Print东方不败的DF啊,点name来右键运行程序。好,大家会发现我直接达到了,得到了东方,触发了get tr吗?很多说没有啊,来反过来看这个顺序啊,它能触发gett tr吗?来你可以发现,哎呀根本就不行,看见了吗?也就意味着哦,要是成员存在的话,我是最后一步才能放到我这块,是不是前面要经过get h要经过什么呀?描述数据描服务要经过当前对象成员类的负类的是不是,然后一直到最后。
28:18
他说这啥都经历过了,是不是猜到你意味着什么呀?看见啥,意味着压根就没这个成员呗。是不是大家想想是不是前面都经过了,还没有,是不是就是没有这个成员的时候,所以大家看好了,我访问那么2E啊,来运键运行,你看是不是上面写着get tr被触发了,只不过参数不对啊,所以我要告诉大家的是啊,Get at tr这个魔术方法。他是什么时候被触发的呢?简单的说就是在你这个过程中谁也找不着,那谁也找不到,就是根本就不存在呗,是不是,所以它的触发时机来给大家记一下啊。诶,别走啊。好,这只拉不过来了啊。
29:00
A往后拉一下。回的车好,我们再来给大家写第二个要讲的魔术法,叫做下线下线get at tr get at tr下线下线跑上括二本没括号了啊,然后呢,依然是从这几步来给大家了解一下,好吧,我们刚刚了解了是的,触发时机对不对?什么时候会触发我们的get at tr呢?如果说的复杂一点啊,就是在刚刚那个顺序里边,前几个,前六个是不是都找不着啊,是不是如果说的复杂一点,要想触发它一定是访问属性的时候,前六个都没有啊,该开是没有,我对象里没有,负类里也没有负类的,负类里类里边也没有,负类里边也没有,是不是哪都没有啊,那不就是对象条件不存在吗?所以它的触发时机是访问不存在的对象成员的时候触发。这个千万注意啊。访问不存在的对象乘写错了,访问不存在的对象乘圆的时候自动出发,它有什么作用呢?那你说正常情况下,如果说是什么呀,这成员不知道你访问是不会报错呀,所以你想都不想,我想它之后肯定不会报错的,没错啊,来看好了,我现在访问内二对不对,右键程序。
30:20
报什么错误呢?他的错误告诉你get drr的问题啊,但是你看好了,如果我在这里边把这个get DR给你注释了,或者给你暂时删掉,你会发现他报的是另外一个错误,看到没有,他告诉你人类对象根本就没有属性内门。然而我写了这个之后呢,它其实啊,报的是什么错误啊,你这个格式不对啊,你看没有该CDR格式不对,说白了你这少谁啊,少个参数啊,少了参数。好少一个参数,你把这个参数一写进去,右键在运行时看看还报错吗?是不是报错了,所以想都不用想,它一定有一个防止访问不存在成员报错的一个问题,是不是防止访问不存在成员的时候报错,不存在成员的时候报错。
31:05
这个功能它是真实存在的,当然人家还有别的功能啊,这是它的第一个功能,好了,那我们在这里边把它的内容写进来了,把这个参数也写进来了,也能调用了,对不对?那我们刚刚打印成员内二的时候,返回值是当那我不希望是当我希望定自己给它定义可以不可以呢?可以,那这个时候你就要在这里加返回值了,返回什么值呢?白比如说C。东方不败是不是西方失败?啊,什么时报啊,失败。然后右键运行程序,你就可以发现内二的结果就是西方失败了,看见没有,所以这这个还可以给不存在的成员定一个值啊,可以给不存在成元定一个值,也是它的一个作用啊。叫为不存在的成员定义值啊,可以是成员属性,也可以成员方法,只要不存在就可以给它定义啊来接着来玩啊,那我们这个还有什么作用呢?好,不存在的成员,我们要做的其实主要就是这两方面啊,其实主要就是这两方面。
32:07
然后呢,在这里边啊,在这里边你要想加其他的操作或者做什么呀,做这种叫做狸猫换太子的事情也都可以做的,比如说用户访问不存在的时候,我永远给他的名字行不行呢也行。来,你可以在里边直接返回什么呀?Self name,这就看你自己的需求了。来给大家看一下啊。来右键运行。看到没有?东方不败,永远给东方不败是不是?所以这个还得根据你的实际需求来决定啊。好了,那这样一来的话,大家对它的作用是不是也了解了,防止报错是不是微博三成员定义值是不是都可以啊,它有没有参数呢?有一个SF是自带的SF接收当前对象啊,接收当前对象,然后呢,另外还有一个参数呢,这个参数吴佳也知道啊,因为你访问不存在的名称的时候呢,诶你就得告诉不管你访问谁,是不是你触发了我,我都得知道你在访问谁吧,咱不是写内尔吗?其实在这里边你如果打印一下你就可以看到啊,Print里边我们这个item参数其实写的就是内尔啊,看到没有,是不是就是内蒙尔啊,也就是说你要访问的成员的名称字符串会传送到它的参数当中啊,会传到它的参数当中。
33:21
所以在这里边第二个参数啊,第二个参数,第二个参数接收的是访问成员的名称字符串,然后呢,根据这个字符串呢,我们可以做一些什么呀,做一些额外的操作,比如说如果用户访问性别,我给还是不给,是不是,或者用户用户访问别的错误的信息,我给他什么信息,比如说诶,比如说我们在这里边可以加一个小的判断给大家看看好吧。用户访问与name相关啊,比如说我们在里边检测用户访问与name相关ame name相关的信息啊信息。都返回啊,名称都返回。
34:03
名称。怎么玩呢?这简单的说就里边包含name字符串啊,或者用户写错了,不小心写成NAME2了,是不是我都可以给他,那其实很简单啊,我们只需要用一个简单的操作,什么操作呢?If,我们的name字符串啊,它如果in我们的item是不是item不就是你传来字符串吗?是不是,那我就返回,哎,我们就在里边return self name啊。 sefself.name也这个意思就好理解了,你看我访问的是NAME2对不对,然后呢,可能用户不小心想了个二,那这个时候你会发现,哎呀,Name在这个字符串,就NAME2里边,我就可以帮你返回名字了,就是说做一定的什么容错性啊,但是这玩意用处不大啊,用处不大,所以一般情况下它还是什么呀,他还是为我们不存在成员设置一个值,或者设置一个警告信息等等,这就是我们的。
35:00
Get h tr魔术方法,我相信大家对这个方法是不是也已经了解了,好了,来接着来看这个方法的返回值,有还是没有呢?可以有也可以没有,你没有的话是不是就那了,所以叫可有可无啊可有可无你不写无所谓啊,注意事项。没什么注意事啊,它主要注意的就是什么呀?呃,不存在的成员会触发是不是啊,OK,然后呢,这个魔法就给大家介绍完了,这个魔术法介绍完了之后呢,我们再来看下一个魔术画,下一个给大家介绍的是什么呢?是set at t,第三个叫下划线,下划线set at tr。At tr下线下线,那么依然是这五个操作,复制过来粘贴一下。好,把这些数据删掉。为了要试验我们这个魔术方法的话,我们依然要给大家重新写一下,好吧。好,然后在里边我们新建一个新的模式方法文件啊,右键新建。
36:01
Third third,下划线,我们写上的是set at tr,好,点击OK。然后呢,在这里边老规矩,写一个类,什么类呢,还是人类行不行,咱就不费那劲还写人类啊,偷个懒还写人类,把人类复制过来。删掉所有魔术化和其他的数据,只流人类本身。行多少一点点啊。好,删掉魔术方法啊,只能只留人类本身,然后对象成员访问再删掉。好了,这样一来的话,我们又有了一个人类的对象,对不对,然后呢,在这里边干什么事呢?我们想进行一个操作,叫修改对象成员,修改对象成员好修改对象成员,这个大家也会取得DF,不要我改名字,他的名字东方败改成什么呢?改成这个。呃。呃,东方不谁打架来着,和和这个东方不败,呃东方西门吹雪,咱把它改成西门吹雪行不行,西门吹雪啊,西门吹雪,然后改没改成功呢,不知道啊,反正改完了之后我们可以看一下嘛,来查看。
37:11
查看修改的信息啊,查看修改之后的信息可以在哪看呢?Print我们可以在对象里面看啊,详现在D,当然你可以再次打印的,这样看更更直观一点,那大家看啊,是不是里边name变成新门吹雪了,在我们修改之前啊,你也可以打印一遍,你会发现修改之前就是东方不败,看到没有,东方败改之后是不成西门吹写了,那我希望在用户修改成员的时候呢,做一些限制怎么办呢?那这个时候就可以在这里面添加。新的魔术方法。我说方法,然后呢,DF哪个的下线下线set at加啊好当我们写出来之后呢,Print一句话啊,Set加忘加下线了,我说怎么对呢,下线下线啊,当我写出这个set a tr啊方法被触发,我再次运行程序的时候,你会我下面不动啊,再运行程序,你会发现程序报错了。
38:09
报错了,仔细看啊,他说塞DDR只有一个行差,但你给我仨,也就是这个们是不是还缺两个参数,行,你缺俩参数,我给你写俩,你叫A也行,叫B也行啊,因为行参你可以自己定义,包括上面这个安们你也可以自己改啊,改成你希望的就可以了,我不知道,我就放这儿来再运行程序,你看还报错吗?是不是程序不报错了,程序不报错了,但是我们发现了一个问题,什么问题呢?对象里边没成员了,看见没有,对象里面没成员了,好说这是为什么呀?是不是很简单,因为对象要想进行修改,就一定会进行这个操作,包括要想添加也就这个操作,很多时候为什么没有东西了,是不是很简单啊,上面这三个步骤也会触发了。触发你什么都没干呢,是不是所以没东西啊,里边空的呀,这就是为什么我们现在看对象里边啥也没有啊,里边啥也没有啊,你看是不是在谁家触发好几次你没有东前三个触发啊,前三个触发是unit里边这三个设置触发的,然后第四个触发是你最后这个修改的时候触发的,修改的时候触发的。
39:17
所以我们可以确定一件事情,什么事情呢?只要涉及到成员的修改与添加,一定会触发它,所以它的触发时间还是挺明确的啊,什么时候触发呢?添加对象成员啊,天哎。添加对象成员,对象成员或者是什么修改对象成员,对象成员的时候自动触发,这是它的触发时机,很多人他有什么用啊,是不是很简单啊,改的时候你可以按照自己加入一定的规则。比如说看好了,我想定义的规则是修改成员叫做叫做什么呢?
40:03
叫做禁止修改性别啊,这是我的规则之一的禁止修改性别啊,写错了修改性别,这是第一个要求。第二个是什么呢?好,我们可以在这里边修改名称的时候啊,修改名称。禁止啊,修改名称的时候叫做禁止使用啊,不能说禁止使用,这样不太好听啊,修改名称的时候咱这样吧,咱这个最多三个字怎么行,最多使用三个字符,多余的舍弃啊,这是我们给我们自己家的要求啊,就改对象成员的时候,我们自己家的要求行不行?好了,那来呗,要写这个操作啊,好,正常情况下我告诉你这个模式啊,你即使不写对象的也有。这个魔方你不写对象里面有啊,为什么你能加进这个成员,为什么我们之前就能修改呢?原因很简单,因为set at加魔法根本就是从object的什么这个对象里边继承,或者叫类里边继承而来的。
41:08
啊,也就是说白了,我们在这里写,其实相当于重改啊,相当于在重改,哦不这样的中等上线上线赛。你要你现在操作其实在重改它。多说我不信啊,是不是好没捡到,我们可以把我们这的操作拿回来看好了。Object点下划下划线set at t,它下划线下线,然后呢,你把你对相应的参数直接给他,直接给他就可以了啊,你会发现有和没有都一样。真的,你会发现有和没有都一样啊。这个魔方写和不写都一样,右键运行程序不会有任何变化,看到没有,不会有任何变化,很简单啊,就因为这个方法,这个方法本身这个对象里边就有,现在你重载了之后又调用了什么呀,负类中这个方法也是你根本就没加深任何东西,也没改过,对不对,所以这个要注意啊,那我们想修改性别怎么改呢?哎,在这里边。
42:08
判断呗,首先我得判断一下是不是要改性别吧,怎么办呢?这就要需要用到我们的AB这两个参数了,大家看一下A和B分别是什么,A和B。来在这里边把这行代码注释掉写啊,我们运行程序下面是不是要修改的是name,是不是来右键你看注意看好了,我们要改的是把name改成西门吹雪,然后在里面右键运行的时候,大家就可以发现,什么呢?大家就可以发现啊,在这里边A其实收到的就是name。是不是,然后这个B收到就是西门吹雪,上面这三个是设置的,你不用管,是就是按in尼里边的,你可以注释掉,也无所谓,然后呢,既然这样的话,大家其实就知道了,A其实就是什么呀,就是成员属性的名称,我们一般叫它at tr name,这是个人习惯啊,那B是不是要设置的值啊,或者要修改的值啊,写个value就可以了嘛,是不是,那这样一来的话,好把这个删掉。
43:05
我们想禁止修改性别,那就简单了,F。A,干什么事呢?在这里边如果说我们这个at tr,那at tr name,它等于等于six是不是性别乘以里面是不是性这个性别。然后很多时候我什么都不做啊,行不行不行,注意看好了不行啊,因为你什么都不做的话,他压根就不会有性别的啊,因为什么呀,因为这里边儿你在里边是不是初始化性别啊啊,这个时候就要注意了啊,你这个时候这里判断会把它给禁止掉了,所以我们可以干什么事呢?把上面的性别拿到下面来玩。但这样更惨。这样更惨啊好,很多时候为什么更惨呢?想想啊,你在你在这个上面进行一个设置操作,主要是是不是触发了塞TDRRCDR进来之后判断符合要求,又进了six,这个six还是一个当前对象的设置,又触发了自己进来又触发自己。
44:07
所以这样会递归死的,哎,这个没递归啊,真不客气啊。好了,当我没说好了,这里边的话,这个性别禁止修改啊,性别禁止修改我看看怎么样比较合适一点啊。性别禁止修改的话,我们要判断它是不是性,是不是性别,如果是性别的话,嗯,就。不允许改。Pass,然后如果不是性别else不是性别的话,我们可以让他改,注意改的时候一定要用object来操作啊,Object点下划线,下划线set a tr,然后把这个当前对象和它的什么呀,要设置的成员属性名称以及它要设置的值放进去,这样大家看一下我们右键操作啊。你会发现性别没加进去,剩下是不是都可以加进去,也可以改呀,是不是,所以这里边基本上就实现了什么呀,就实现了我们的性别禁止修改,其实你在这里边不但禁止了修改,连添加都给禁止了,连添加都给禁止了,所以你要做的操作最好在修改性别之前,因为在这里边加加不进去的,在这里边好多说那怎么这里边不让改性别,我加也加不进去了,因为添加也属于修改的一环,所以加不进去。
45:24
他们说那有什么好办法吗?嗯,有干什么事呢?把这个性别提到类里边,可以用来解,可以解决问题啊。看好了,我放这儿。你放这里边的话,对象无论如何它也加不了,他也改不了对不对,那但是你要访问性别的时候,它不存在怎么办呢?找类要啊,所以看好了,我们现在这里边啊访问一下性别。访问性别,访问性别写错了啊,访问性别。来我们这个对象啊,df.six你会发现它能访问的。
46:01
是不是,虽然里边没有,但是他的防盗,因为当前对象没有,是不是找那样的是不是,所以你想改别做梦了,改不了的,看好了修改性别改不了。修改性别,他压根就什么都不会做啊。修改性别ef.six等于比如说改成一个女,根本就不会有任何的操作发生啊,也不会有任何反应啊,他说啊改没改成功啊,没改成功,你可以再次打印性别,他依然是类里边的那个男,他不可能改成女的,因为什么呀?因为你在这里边一旦要修改触发了set tr到这块,是不是就禁止给pass了,啥也没干对不对,所以你改不了,明白了吗?至于第二个要求说,哎呀,我要使用的是什么呀,字符改名字最多仨的,多的不行,那这个时候你就要自己再加一些额外的判断了,比如说啊,Eli改成E,如果你名字等于差,怎么怎么地怎么怎么地,是不是这个我就不给大家介绍了,好吧,留你自己来完成第二个操作。
47:03
但是在这里边千万要注意啊,在set加里边要想进行对象的修改,禁止使用对象self点什么操作一定要借助object来完成,这个跟attribute是一样的道理。所以它的作用我们也知道了,作用什么呢?作用可以啊,可叫做可以限制或者是管理对象成员的写错了对象成员的添对象成员的添加与修改操作参数嘛,有没有有Excel接收当前对象,第二个接收什么东西呢?它接收的是。这个叫做叫什么来着那个呃,设置的成员属性名称字符串,成员名称字符串,第三个是设置的值啊,设置的值返回值有没有呢?五因为它是一个执行过程函数,毕竟设置是一个操作,是一个过程,对不对,注意事项也是和get第一个get HP是一样的啊。
48:13
在当前我说方法中啊,禁止使用对当前对象,当前对象啊,说白了就算说呗,当前对象点。第二,成员名称啊,成员名等于值的方式啊,会触发递规操作,这个千万要注意啊,这个千万要注意啊,因为它这个和上面这个get attribu是一样的一个操作,会触发递归的啊。好了,那么这样的话,关于set DR大家应该也了解清楚了吧,其实就是对你的设置进行一些管理和管控的重载,当然即使你不写没关系,因为系统默认它就继承了object的,怎么样?赛题啊?好了,那么感谢大家收看比小节啊,我们下一小节继续给大家讲解剩下的两个好不好。
我来说两句