00:00
同学们大家好,那么这一小节开始继续为大家讲解面向对象的内容,本小节当中将为大家讲解的是什么呢?描述符,好,在这里边打开我们的文文,呃,这个拍差软件啊,新建一个文本文件,又来给大家做一下介绍啊,写一下描述符。这个单词描述符啊,听起来是不是非常高大上啊,对不对?那到底什么是描述符呢?先给大家来介绍一下描述符,它的概念到非常简单啊,我们怎么样称之为一个描述符呢?如果我们一个什么呢?一个类中包含了三个魔术方法,哪三个呢?三个魔术方法。那哪个三个魔术方法呢?分别是下划线下划线get魔术方法,然后下划线下划线set魔术方法,以及下划线下线delete I dl模式方法,三个啊包含三个之一或者全部或者全部的类,那么这个类就是一个描述符。
01:08
啊,就是一个描述符,当然大家光看到这里会觉得很奇怪,说这什么东西啊,听起来怪怪的是不是?其实简单的说就是一个类里边有这三个东西啊,它就叫描述符,那当然描述符的作用是什么呢?大家可能更关心,说描述符有什么用对不对?好,我们给大家介绍一下描述符的作用,好简单的说,描述符的作用是什么呢?描述符的作用就是对类中应该找对象比较好啊,就是对类或者对象中某个成员啊。某。各成员进行详细的管理操作啊,我们之前其实呃对于成员属性或者成员方法的一个管理,之前已经学过了什么get呀,呃,Get h tr呀,Set t DR tr,是不是包括我们的get HP上那也是,但是他们和描述符不一样的是,描述服是对指定成员的管理,就是他只管理某一个成员,而我们之前学的那三个玩法是对于任何的成员是不是都可以进行管理啊,是不是这是他们最大的一个区别,当然描述服务它对于某个成员管理自然比什么呀,比对我们这个所有成员管理要更加的详细啊,更加的完整。好了,那描述服作用也知道了,那么下面就给大家来介绍一下描述符该如何制作以及如何使用好不好,为了给大家讲解当前章节,我们需要来复习一下上一节课当中讲到的一个内容,什么东西呢?就是关于我们属性方法相关的。
02:50
内容什么内容还记不记得,最开始的时候给大家讲了一个成员属性的访问顺序,在这里边就出现了描述符,看见没有?诶,调用数据描述符,调用非数据描述符,所以在讲这个之前,可以大家再讲两个概念啊,什么叫做数据描述符?什么叫做非数据描述符?这个概念呢,其实也很好理解的,什么叫数据描述符呢?同时具备啊,同时具备三个魔术方法的类啊,就是数据描述符,那么如果没有同时具备啊,没有同时写错了,没有同时具备三个魔术方法的类就是非数据描述符。那么至于数据描述符和非数据描复符之间有什么区别啊,除了它的格式上有区别之外,最大的一个就是在你访问的时候。
03:47
数据描述符的优先级比非数据的要更高一点啊,简单说就是数据的它更加的完整,而非而更加的完整啊,非数据就是不完整的一种描述符。
04:02
好了不完整,好了写完之后呢,下面我们来给大家写一下关于描述的应用行不行,在这里边儿呢,我们新建一个文本文件啊,右键新建一个不是文本文件P文件行不行,咱叫它啊英文单词描述符,描述符dscript,好,这就是描述符的单词啊。好建立一个文件,然后呢,干什么事呢,我们在这里边声明一个类。声明一个类,什么类呢?咱简简单写一个邮箱类,什么叫,那么在里边啊,声明一个邮箱类。邮箱类不是邮箱啊,是邮箱email那个邮箱类啊,邮箱类好class我们叫它什么呢?Email行不行。OK,然后呢,我们在这里边可以给它定义很多的成员属性以及成员方法好,比如说我们给email加一些属性行不行,加个什么属性呢?我们现在先给它加一个用户名的属性好不好,那就是user nameme属性好我们写上什么呢?你可以写上张三李四,或者默认是一个number是不是或那啊没有随便,这是一个随便写的一个值啊,然后呢,还有密码,Password是不是密码,我们可以写成123456啊,123456,然后呢,接着还可以写成各种各样的信息,比如说你的什么电话是不是phone,电话是多少,默认是一二三四五六七八九十啊,就这样写就可以了。车辆方法呢,咱也加几个啊,加哪些呢?比如说加一个登录的方法吧,是不是我们的邮箱是不是都可以登录啊,加个登录方法EF,我们叫它login行不行,Login方法好,然后呢,写上一句话就可以了,代替一下,在这里边我们可以对它一个书写,写上什么东西呢啊这。
05:45
它是一个登录方法,这是登录的方法,我们用不到它,因为描述符描述的是属性类别的方法,类别只是这个位置大家看起来类更加完整啊,再来一个退出吧,好,退出这块呢。退出。
06:01
退出这块啊,我们依然定一个叫lookout行不行,Log啊lookout方法,然后在里边输出一下啊print,这是一个退出的方法,这是一个退出的方法,好了我们在类就写完了,那么类写完了之后呢,我们再来给这个类添加描述符,那之前给大家讲过描述符是什么呢?是对于某一个成员啊,某一个成员进行详细管理的操作,那所以我们要想描述成员的话,就在里选一个啊,一般情况下选的是成员属性类别的,那咱们选择,比如我们选择用户名,这个行不行,这是一个用户名。那么我们想对用户名进行一个更加详尽的管理,首先呢,在详尽的管理之前,先给大家实际化对象,再看看行不行,实际化对象让大家先用一下啊,看看有没有问题什么的,来在这里边啊,我们写上一个一啊,写一个ma吧,行不行,Ma等于email。
07:00
这个类实例化的一个对象,然后呢,我们访问我们的用户名,好吧,访问用户名好,访问用户名没有问题,Print抄上括号,没点user name。The name,那么这个时候大家知道啊,因为我们这个ma它是一个对象是不是,但是对象我们这里边并没有阴你的方法,所以实际上这个对象里边是没有一个成员叫做什么呀,Username的,但是大家也知道啊,如果对象里边访问一个成员不存在的时候,它是不是会反向查找它存在的它的类啊,对不对,所以实际上这个user name就会输出类里边的这个值,也就是我们的那啊,也就说那这个值是不是完全没有问题,好了,接下来。那么我们现在希望对于用户名进行一个更加详细的获取,添加删除的一个管理,怎么办呢?那么在这个时候呢,我们就可以把它交给描述符,那如何把它交给描述符呢?好看好了我的操作。要想交给描述符,必须在类之前就已经存在一个描述符明白,所以描述符的声明啊,你要声明描述福类必须在类之前,不反正不能赖在之后啊,然后必须在类之前存在啊,那这个时候OK,我们class声明一个类,这个类就是描述述类了,单词呢,就看大家个人的爱好了,你要写拼音也可以啊,Ec。
08:25
IP啊,我没写错吧,IP啊,多了个P,好,这就是描述符的,或者叫描述符的英文单词啊,然后呢,那写描述符其实并不难,为什么呢?因为我们之前也给大家定义过了,描述符里边非常简单,就这仨东西,什么都不需要啊,所以只需要在这里边干什么事呢?定义描述符的三个成员,定义描述符的三个成员啊,非常重要的三个成员,哪三个成员呢?第一个DF啊,就是我们的DF啊,下线下线get下线下线这个成员。
09:00
然后呢,Pass一下啊,里边有什么东西我们不知道啊,DF下线下线,然后呢,Set下线下线好上框啊pass里边有什么东西我们也不知道啊pass然后呢,在DEF我们下线下线defl下线下线啊然后在这里边再pass一下,里边有什么东西我不也不知道,那么现在就有一个问题存在了什么问题呢?我怎么样把把这个用户名这个成员交给描述服来管理,是不是交给描述管理,交给描述符管理。这个道其实不难啊,只需要把它的值给删除掉,然后原来正常情况下我们是不是给用户名赋了一个值啊,是不是,现在不是,现在是让用户名直接等于描述符的一个对象就可以了,也就是说用户名user name这块直接等于我们的script啊,描述符script它的一个对象,这是不是就是实例化的一个对象是不是?所以注意看好了这一步大家看起来是等号,但实际上是一个交付,或者叫做交付管理的一个操作,这就相当于把用户名啊付给了描述服务类的一个对象进行管理,明白了吗?就是一个交接行为。
10:15
所以在这里边啊,交接行为在此发生,这是交接啊交接。交接行为在这里发生。好,发生了之后呢,那我们用户名的相关管理是不是应该都在这个描述分类里边来完成了,对呀,没有问题,但是大家想一想,那我管理谁呀?这里边也没有个成员,你用户名怎么传给我啊,是不是?所以在你交接的时候,需要在描述福类里边定义一个临时成员来映射到我们的用户名这块,简单的说就是什么意思啊,比如说啊,现在呢,给大家画画幅图吧,来给大家做一个比较详细的介绍啊,这个东西在现实中或者大家看电视的时候会经常遇到类似的情况,来打开我们的这个画图板啊,画图板复件啊。
11:03
然后呢,找到画图板。好了,打开话动板。大家都看过宫廷剧吧,是不是大家是不是都看过宫廷剧,还看过什么僵尸剧,是不是大家都知道有个东西,什么东西叫做巫蛊之术,或者叫巫蛊之术,那么正常情况下呢?诶,我们这里边有一个人啊,我们这块有一个人在这里边,这里边有个人啊,虽然胖一点,但是这他妈这是人么,好,就大家看吧,啊,我们这里有一个人啊,我们这里有一个人。然后干什么事儿呢?这,这,这是脑袋,这是腿啊,这有一个人啊,这是一个人。或者说这是哪个娘娘,是不是,然后呢,干什么事儿呢?他是真实存在的一个人,我现在希望干什么事呢?我现在希望对这个人下巫蛊之术,比如说我让他胳膊动,让他腿动,或者是下毒诅咒之类的,那么怎么办呢?我是不是想把这个人交给别人来祸祸他,或者叫交给别人来陷害他,对不对?所以我们在电视上看到的情况是这样的啊,我们希望把这一个人啊,整个的一个人,他的行为或者他的操作。
12:09
对使用巫蛊之术的人来管理,所以我们希望把它交给别人来管理,比如说我们这里边有个什么呢?我们这里边有一个道士啊。写的道士或者是一个会巫蛊之术的人,我们希望他来管理这个人,那么请问啊,这个道士该给换个颜色吧,我们这个道士该怎么样来管理这个人呢?当然你不可能把这个人拿走,是不是?那就要杀人了,你就比较巫蛊之术了,大家一看宫廷剧里边,或者看僵尸里边,是不是道士会什么呀?会自己在他手里边扎一个稻草人,然后写上这个人的生辰八字啊,对不对,没错,就这么玩的,怎么做呢?道士他会在自己的管辖范围内啊,就像他的手里边啊,做一个什么呢?做一个诶。小的稻草人啊,做一个小的稻草人。
13:00
画的不好看,错看啊,这注意看好了啊,这就是一个稻草人啊。你也可以认为是一个,呃,布娃娃之类的东西啊,反正巫蛊之术大家都看过吧,是不是好这个注意看好了这个东西。是什么东西呢?我给大家说过了,这是一个代替啊,这是一个叫做代,这是一个什么呢?类似于稻草人,或者说是布娃娃的一个内容,这个东西主要干什么事呢?用来关联原来真正的是不是关联真正的人一般会写上什么生辰八字,生辰八字之类的东西,对不对?大家看电视是不是经常这么干啊,啊,我想陷害某个人,我就干什么事呢?做个布娃娃,上面写他是生辰八字,只要贴符呀,扎针呐,是不是那一样,在这里边道士其实就是我们所谓的描述符啊,道士描符也说道士来管理嘛,对不对,这个就是你要管理的属性啊,要被管理的成员,然后干什么事呢?你要让让道士管理这个成员的话,道士是不是手里得有一个东西来代替你啊,是不是没错,我们在这里边也是一样。当你。
14:13
描述符类建立完了之后,你希望通过描述来管理我们用户名的话,就需要在描述服里边建立一个临时的成员来代替用户名,就是类似稻草人呗,是不是?那怎么做呢?我们可以在这里边啊,在这里边添加一个好吧,在这里边初始化一个临时的成员属性,它干什么用的呢?用来代替什么呀,代替我们原有username的操作啊。来提user name,也就是说你只需要在这里边什么呀,操作这个临时成员就可以让user name发生变化,反回头来看,这是不是我操作这个稻草人就可以让原来的真实的人发生一些行为啊,发生一些呃,疾病之类的,是不是一个道理?好,这样来的话,简单加个成员咋也不会吗?DF下线下线init下线下线考上框,然后呢,成员你名称自己叫啊,随便点S点,比如说临时的TMPVR行行,临时成员叫什么名的你随便啊,你可以写个默认值,比如说我们原来这个什么来着,我们原来用户名是不是写了一个nu啊,那我就可以在这里边也给它定义为now。
15:25
看好了,这个时候大家就要明白一件事情,什么事情呢?在描述符里边操作这个变量,或者叫这个成员,实际上就是对于我们username成员的一个操作,是不是相当于稻草人,是不是,所以呢,这里边就很明显了,这个是我们要管理的人啊,上面这个呢,最上面这个描述类就相当于道士啊,这个相当于我们的道士啊。就现在我们的道士这个变量,就相当于道士写错了啊,道士手中的稻草人啊,或者手中的布娃娃啊,手中的呃,布娃娃嘛啊,就这个意思,你只要操作这个布娃娃下面这个真正的用户名就会发生相对应的变化,好了,那这样的话万事俱备,只欠东风了,也就说现在我们已经写好了,就差操作了,来大家看一下。
16:19
在我们之前没有声明这个描述福类的时候呢,我们在访问的时候大家也看到了,是完全没有问题的,对不对?好了,我把上面注释要给大家先再重复一遍,好吧,好注释一下,然后看最后这个啊,右键运行你访问用户名没有问题啊,但是现在有问题了,现在跟什么事呢?你是不是交给一个对象了,是不是没关系,我们先把这个先给他退一下,然后大家看一下,原来我这里边写了一个,那你访问的时候是没有任何问题的,对不对,现在呢,不要闹了,为什么呢?因为我把它交给了一个描述符类的对象来进行管理,那这个时候啊,打开上面描述符的注释啊。把注释打开好,把下面这个注释也给它打开。
17:03
打开了之后呢,我们就真正的完成了这个管理的交接工作,下面就是使用了,好了,OK,两个是不是都打开了,好了,我们下面干什么事呢?我们在这里边看好了描述,福类大家看是存在了,但是没怎么做操作,是不是email类也存在了啊,我们实例化对象了都对不对,但是现在你如果希望干什么事儿呢?访问用户名访问不到了,右键访问用户名。大家看会报错报什么错误呢?他说我们下划线get它有一个型参,但是却给了我三个实材,看懂了吗?参数多了,实际上这也侧面的证明了一个问题,什么问题呢?我们在这里边访问用户名的时候,实际上是触发了,或者怎么实际上触发了get某术方法,当然大家如果有疑问的话,你可以这样操作啊,我们可以注释掉访问操作,这个时候你再来看右键运行。看没有任何错误吧,对不对,所以可以证明确实没有问题,然后呢,我们在这里边啊,打开注释的时候,发现它触发了get魔术方法的同时呢,同时告诉我们问题出在哪,出在哪呢?他说我们的方法里边参数不够,没错,SF里边确实还有两个额外的参数,至于servef很多说这是谁呀,描述对象本身呗,是不是,所以呢,为了看剩下的这两个,我在这个什么呢?Get某生耳中回加打开什么东西呢?你看好了,是打开我们的所有的成员信息啊的参数信息啊,也就是我们可以看到SF是谁,A是谁,B是谁,来右键运行一遍程序。
18:41
大家可以看到在我访问谁呢?在我这个有点长吧,有点长啊,有点长这样吧,分开三个写吧,行不行,这个有点长,我们分开三个写吧,Print print,我们的A啊和print我们的B。我们的B。好,然后右键再去行啊。
19:00
好,大家会发现SAB全都出来了,从这个形象上或者形式上我们能看出其实S应该是一个对象,对不对?没错,它是描述符的对象,看见了吗?所以SF其实都是当前类生成的对象本身吧?而A是谁呢?看好了,这是email类的一个对象,对不对?所以实际上是把谁呀,实际上它是把这个最后实例化的email对象传了进来,你要管理嘛,是不是,然后第三个大家也看到了,是谁呢?是一个类,而且是email类,所以在这里边我们可以知道这里边分别surf AB是谁了,在这里边surf它是注意看好了描述符的对象啊,因为是描述符,在描述符里边SF当然是描述对象啊,然后这里面的A是谁呢?A咱也知道了,我们说它是什么email的对象,但是这个多不好看是不是,所以咱改一下叫OBJ行不行,所以在里边OBJ实际上就是email对象。
20:02
Email对象,对象谁呢?Email呗,Email实际化的对象不就ma在最下面吗?对不对,B咱也知道是email类是不是,所以在里边这个咱一般也不写成B啊,写成CL啊,它就是CLS就什么呢?Email类本身email类。Email类本身。那么这个时候就非常的清楚了啊,我们就非常清楚这些参数是谁了,简单说selff是当前描述符的对象,OBJ是谁呢?是你下面要描述或者管理的那个类的对象,就是email类,Email类的对象是不是叫ma,然后呢,CS就是这个email类本身,因为你要在描述服类里边管理另外一个类的话,你是不是把别人类和对象传进来套管理啊,是不是?所以这里边会有一个传入操作,好了,既然知道了这个之后,把这个注释注释掉啊,Pass一下没问题。大家来看一下啊,我们现在s get肯定不会报错了,右键运行程序,你会发现返回的值是那没有值,为什么呢?很简单,因为在下面我们使用ma对象啊,往下拉啊,我们在这里边使用ma对象。
21:12
来访问username的时候,那么它实际上会按照我们之前的调用顺序,先调用get attribu,没有啊,没有就该找描述符了吧,是不是,那这个时候他就立马来找描述符,问描述符我这里边有没有信息呢?结果苗师说哎呀,没问题,你来了是不是,你来了我就给你,因为我们这里边是不是已经将u name交给谁,交给苗师傅对象了,所以苗师傅就开始管理你这个成员了,怎么管理呢啊,他就把这个四点什么呀。TPVR的值给你了,很多人给了吗?实际上还没给啊,因为好多时候你看到不是一个none吗?是不是运行不是none吗?不就是你在这边定义的值吗?不是啊。这个呢是什么值呢?这个呢是get什么都能返回的值。
22:04
所以在这里边实际上什么呢。Return get返回什么值我们就可以收到什么内容,比如说我这边返回一个888吧,那么这个时候你会发现U在内的值其实就是888,你返回777的时候啊,777的时候,那么用户名的值其实就是777,看见了吗?这个时候你会发现,哦,原来我获取user内的操作完全被get来管理了,对不对啊,当然我们一般情况下不会这么直接访问,会返回什么呢?会返回当前描述服对象当中的一个值,就是四点啊,四点。就是他们的临时那个稻草人的值嘛,Type VR右键运行点啊,当然这个是个字符串啊,你也可以写成别的嘛,是不是比如说匿名用户。很多情况下不是有匿名用户吗?匿名用户OK,然后呢,右键运行一遍程序,大家一看是不是返回匿名户了,你希望返回什么值就怎么设定就可以了,当然因为我们这里边get魔术方法交给你了之后,你可以进行任意的操作,所以你也可以什么呀,管理成员的什么信息呀,设置啊,有没有权限访问啊,通通都可以在这里边进行更加详细的管理,比如说我们在这里干什么呢?设定用户名的情况下,一般情况下要求什么呀,一般要求我们的数字不小于多少位,我们获取好像不是啊,获取用户名的时候这样吧,咱。
23:33
效仿上次描述那个get ATP的操作,获取用户名的时候咱隐藏一些行不行,咱只漏。第一个字母就行了,别的不漏好吧,所以我们在这里边啊,希望干什么事呢?希望叫获取用户名啊,用户名的时候仅仅返回第一个字符,其余的。都隐藏行不行,都隐藏那这样简单了,你正常情况下返问这个temp VR实际上就是返回用户名了,那你如果只希望返回一个的话,那么无非就是处理一下呗,是不是,那我们我们就可以在这里边啊result写先处理一下这个值就可以了,Result等于s.TT点啊。
24:20
TMPVR这是没有经过任何处理的,你希望只返回一个,那就写一个一个就可以了,是不是?那么这个时候返回的时候,我们直接返回result,大家再来看一下这一次的结果啊,我们获取用户名的时候,你会以发现它只有一个字,你看到没有,别的都被你隐藏了,是不是别的都被隐藏了,这就是获取用户名的一个操作,看懂了吗?那么当然啊,你也可以做的更加呃复杂一点,比如说像我们上次做医院那个第一个和最后一个是不是也没有问题啊,那我们这里加上一个。中间加一些其他的符号行不行?加上一些星星,加一个星星吧,再加上最后一个字符啊4f.TPVR点不对啊,sf.tp。
25:04
VAR中括号写一个负一,好,这个时候他依然返回第一个和最后一个中间信号代替,看见没?逆行用户看见了吗?用户名的获取操作是不是就可以管理了?嗯,非常详细,然后呢,如果说哎,我希望对这个用户成员进行设置,该怎么办呢?那么这个时候就得触发我们的set魔术方法,咱不要急,咱先把get记录一下行不行?这里边有三个魔术方法是需要记录的啊。三个魔术方法,这三个魔术方法第一个叫下线,下线啊下线下线get get,下线下线。然后呢,学模式方法还是那么五条,是不是或者还是那么几条,什么触发时机呀,错误用值返回参数的,咱把这个值格式给它复制一下,我来记录一下,好把这些东西都删掉啊。OK,把这些删掉。
26:01
好,删掉,然后呢,我们来进行一下书写,什么时候会触发get呢?简单的说,我们触发时机就是在访问,注意看啊,它是在在访问我们对象成员属性的时候触发,不过这个时候一定有一个前提啊,很多说那我访问别的时候呢,我访问密码能不能触发呢?不能,所以它的前提是当前成员必须交给描述服来管理才可以。所以它的前提条件是触发时机啊,在什么呢?在访问对象成员,然后呢,该成员已交付啊该成员。已经啊,交付或者叫交给吧,已经交给描述服务管理的时候啊属性,嗯,你访问这个成员属性才会触发,这是一个前提条件啊,这是一个前提条件,然后它有什么作用呢?那自然是设置,它的作用是设置啊,我们当前属性的什么呀,获取值或者叫返回值啊,当前属性的。
27:15
返回值OK,就很简单啊,或者当前属性的值吧,没有求返回值的,然后它有什么参数呢?有三个参数非常明确给大家写了是不是,所以这三个参数大家记住一下啊,但是这个参数大家也知道,行参可以随便定义嘛,只有SF是固定的啊,第二个参数咱只能说是第二个参数是一门是我们什么呀,叫做呃,要管理类的对象啊,管理。成员的类的对象,成员的类的对象,然后呢,第三个参数啊,第三个。第三个这是第二个啊,第三个参数是什么呢?是这个管理成员的类。
28:01
的累累。选一下啊,OK,法规值有没有呢?可有可无啊,可有可无,并不是说一定要没有就默认值,那是并不会报语法错误啊,然后呢,在这里边啊,注意事项没有啥注意项没啥注意事项,然后呢,Get模块就给大家介绍完了,刚讲完get,大家脑子里边就会有一定的迷惑性存在,说这个get和get HP非常的像啊,是不是可以说功能其实就是完全一样的。这么说是没有问题的,我会在最后给大家解一下描述符和前面那些东西的一个差别好不好,别着急。来再看第二个模块,什么东西呢?我要设置,比如说用户名,刚刚你在这里边我们没有设置值的时候,访获取的只是一个什么呀,默认指匿名用户是不是,然后呢,我如果希望设置用户名怎么办呢?来。把获取的对象操作给它注释掉,啊把获取对象操作给它注释掉,我们这次来设置用户名。
29:03
设置用户名,然后设置用户名use mail,看好了mail对象啊,点username.username我们等于一个值,比如说等一个什么呢?等于一个这个。嗯,Love是不是love my baby啊,Baby行不行,Baby没问题,我是在设置吗?是在设置,那能设置成功,我们刚刚这个交给描述服务管理的用户名吗?答案是不能来右键运行程序。立马报错了,看到没有,他说set模法是不是出发了,说参数又不够,哎,没错,Set这里边呢,参数也是不够的,那他说了是不是也有三个实参传入啊,那么这个时候我们在后面也加上两个额外的参数,来看一下它这个参数到底是什么?Print一下我们的SFSF大家应该知道谁了,是不是来print一下我们的A,再print一下我们的B。好,右键运行程序。
30:00
那么大家就发现值都出来了,其中我们第一个依然是什么呀,依然是描述符的对象本身,所以S法没什么好说的,然后第二个是谁呢?看好了是邮件,就是email类的对象是不是,所以它第二个啊一第二个依然是我们email的对象本身,所以咱一般把它改成OBJ啊,就是你要管理那个属性的对象,所以这里边啊,我们写上啊,它是email对象啊。然后呢,还有一个第三个不太一样,它第三个是love my baby,可是love my baby明显是什么呀,是我们刚刚要设置的值吧,是不是,所以它的第三个值确实不一样,因为它的第三个值,第三个是你要设置的值,我们一般写value或者V啊好,然后呢,这三个咱是不是都知道了,把这三个也记录向上,记录在这里边啊,V是要设置的值。
31:00
好,来,那这样的话东西都给你了,参数没有问题了,那下面是不是就应该设置机行了,是不是pass一下,好,右键运行程序啊,他们说设置成功了吗?没有,或者说根本就啥都没干嘛,是不是?当然为了检测设置成功没成功,你是不是还希望获取一下是不是,所以呢,我们在设置的时候呢,做一个小小的操作,设置完了再访问一下行不行,设置完了的时候咱再访问一下它的值,看要设置什么呀,设置成功了咱肯定能看到访问的结果啊,你会发现并没有删成功,因为我们的get set里面是不是还写了一个pass呀,啥都没干呢?那么这个时候我们接着来把我们的set给它填充完整。要想对他填充其实倒不难哈,设置一个值位,那你要设置的是谁呢?注意看好了,你要设置的是这个临时的值,就是拿拿针扎你的道士要要祸祸一个人的时候,你拿针扎的是稻草人,你拿针扎的不是真人本身是不是?所以你要设置的时候千万注设置值的时候一定。
32:04
要设置当前描述服务对象的临时变量啊,临时变量说白了就是谁呀,TVR吧,是不是算以在这里边,你想设置有没有问题呢?没有问题直接s.TPVR我想设置成什么呢?我想设置成VL设置一下就可以了,来看好了V,那这个时候我们设置成功了吗?来看一下。成没成功,是不是成功了,你明显是love my baby的love和baby最后一个Y的一个缩写,是不是,因为你获取的时候不是经过一些操作嘛,是不是,但是我们可以看,确实可以看到真的设置成功了,真的算是成功了,所以设置的时候也要对临时变量进行设置,当然你设置的时候也可以做一些额外的处理,比如说设置的时候什么不能超过多少个字符啊,是不是我们在里边啊,限制用户名,用户名不能不能超过八个字符,行不行八个字符。
33:01
那么这种情况下,一旦超过了,你就可以什么呀,帮用户截取一下,或者是做一个错误返回值的信息做提醒,这就看你的那不能超过八个字符,这还没什么,这还有什么难度吗?无非就在这里边干什么事,检测字符。检测字符个数,这就可以了吗?好,我们在这里边直接F字符个数LN套上括号,你要设置的值不就为了吗?如果它大于八是不是就有问题了?那大于八的时候我们可以干什么事呢?我们可以把这个值的前八个取出来当做用户名,后边咱们不要了是不是?那么在这里边直接取出零,然后呢,冒号到几九?是不是从呃不对到八啊,零到八是01234567,是不是一共八个啊,从开始到结束之前吧,然后呢,如果它不大于八,就是小于等于八,那简单了,如果它的用户名本身就小于等于八,那你就直接全给他,是不是就完了,F点2TP VAR就等于V。
34:04
来我们来看一下我们刚刚这个限制能不能成功呢?Love my baby肯定超过八个了,因为它是十个字符吧,对不对,Love my baby是不是十个字符,你看love my baby是十个字符,那么不超过八个,也就是说他会最后选前八个,也就是说love my BA,那么按照获取的时候只取第一个和最后是不是L星A呀,来看我们设置成功了吗?右键操作lca是不是成功了,所以你对用户名的设置管理也已经完成。然后呢,来进来呗,设置管理完成了之后呢,我们把它也给它给大家记录一下啊,那么在这里边返回描述符记录一下。啊,下线下线下线下线。在这里边啊。它的触发时机啊,大家其实也很清楚,跟上面差不多嘛,无非就是获取的时候,感觉设置的时候嘛。来它的触发时机是在什么呀,设置对象成员属性的,在设置设置对象成员属性的时候自动触发,然后呢,它的作用那就是什么呀。
35:07
看到代为设置啊,叫做对于。对,长不知叫对,乘圆的值对。对成员的值进行设置管理啊,设置管理你管理的设置啊,你上面设置是咱属性获取的值吧,是不是获取的值,然后呢,它的参数前两个一样,第三个不一样,第三个是什么呀?要设置的值对不对好了,然后呢,返回值有没有呢?它无问啊,他不需要返回值,也没人能收到注意事项,有没有注意事项是存在的。什么注意事项呢?诶我们刚刚给大家已经在上面写了啊,注意好了,设置的时候你要设置的就是这个临时变量啊,临时变量因为咱是不是描述福利管理就是那个稻草人啊,是不是,所以你要设置临时变量啊,但你获取的时候,你爱给谁给谁,你给临时变量也行,你不给临时变量随便给这个值也是可以。
36:06
然后再接下来看最后一个,那么最好了,下面给大家介绍一下关于删除用户名的操作行不行,删除用户名操作啊,删除用户名的操作,删除用名操作直接写上DL,我们ma对象点U到name就可以了啊,然后删的时候来右键运写一遍,哎,报错了属性错误哦,他报了一个错误,属性错误说delete啊,它有个问题在这里边什么问题呢?写错了啊,魔术方法这块写的不对啊,因为DL模法是我们删除触发的对不对,所以这个是我们之前学的那个模术方给大家写,写错了描述符这应该是dele啊,描述符这个是1D啊,所以这个写的不太对啊,大家不好意思啊,来dle啊,OK,我们运行程序。再次运行发现错误发生了变化,什么错误发生了变化呢?提示不对,这次说诶删除的时候少了两个什么呀,说只有一个餐行行参,但是你给了我俩食参,所以实际上在删除的位置还有另外一个参数啊,另外参什么东西呢?不知道,打印一遍给大家看看,Print我们的self逗号啊逗号,然后再打印一个A吧,Print我们的A。
37:18
右键运行程序。那么这个时候大家来看哦,一下就看明白了,原来self依然是当前描述符的对象,对不对,这个没有发生变化,然后呢,我们第二个是什么呀?是不是当前email的对象啊,是不是,所以它依然是没有变化的,只不过它只有两个,它只有两个,不像前面都有三个,它只有两个,所以第二个依然是email的对象啊。好了,那么这个时候我们就可以把它写成OBJ了,是不是更更形象一点?好,那么删除操作就在这里边来进行完成就可以了,Pass,然后右键运行程序,你会发现不再报那个错误了,是不是?诶然后呢,在我们干什么事呢?删除成员之前,我们先访问一下行不行,在这里边先访问一下我们的U端链us啊us啊,Sorry,没点啊。
38:08
没点u name能不能访问到呢?右键运行你会发现开始是可以访问到的,对不对?然后干什么事呢?我删除了之后我再次访问啊,还能访问到吗?答案还当然可以了,为什么呀?因为你操啥操作没有,是不是两次访问都没问题啊?如果你希望当前成员允许被删除的话,你就需要在他的描述符delete里边做一些操作,什么操作呢?还是一样,对于稻草人进行操作,是不是就是我们的临时变量操作,离时别量或者叫删除临时变量即可,删除临时变量即可。即可即可,写错了即可。好。然后你在这里边直接啊写上DL,我们sf.tpvr,然后右键运行,你会发现第一次它访问的时候可以访问到是不是访问到,但第二次是报错了,就是因为你删除了它的临时变量啊,看懂了吗?所以删除了之后可报错,当然一般情况下我们是不删的,那用户名这个东西大家也知道,在邮箱里是不是非常重要,如果说我们希望用户名不能够被删除,那怎么办呢?你可以在干什么事儿呢?在类里边,当然这只是再给大家讲一下这个参数的作用啊。
39:20
如果你不想删,是不是直接什么都不用写,Pass一下是不是删不掉了,这个大家也知道,如果说我直接什么呀,Pass一下那就可以删就可以什么呀,就删不掉嘛,是不是就删不掉,如果说什么呢?当前这个描述符啊,你是可以描述多个类的用户名的,我十个类,我有十个额外的类,我有十个用户名,你都可以这描来描述,那么如果说我们在删除户名的时候呢,某一个类不允许删除,你可以在里边啊,在这里边设置一个标志啊,设置一个。写错了啊,一个是否允写错了啊,叫做是否允许删除。
40:00
允许删除username的的。的标志啊的标志,比如说我们再来写a a low d user nameme行不行,就这样写,意思就是是否允许删除入户名嘛,比如说我们写上一个false表示不允许行不行,那么这个时候呢,我们就可以在删除的时候来检测一下你当前这一个类的。用户名能不能被删,或者允不允许被删,那么删除的时候你就可以加判断了呗,If,那这咋判断呢?看好了if。我们要判断的时候要有判断依据啊,判断依据是不是在email类里边,诶,通过它是不是就可以来访问啊,如果OBJ的。点low啊,然后呢,DL下线username,如果它等于等于true表示允许删,那TE啊T有一我们就可以。在删除的时候允许操作,否则我就pass一下是不是就完了,或者干脆什么都不写,那么现在大家也看到了啊,我现在这里边儿什么东西呢?It allow name是一个false,不许删除是不是,所以你想删,实际上删不掉的,右键运行一遍是不是两个都是在这删不掉,但是啊,如果这个类里边设置的用户名是允许删的。
41:22
加,那么这个时候又后面是会被折删掉的,上次法会报错,看见没有,是不是摘删掉了,只剩一次了吧,是不是,所以这就是我们后边两个参数的作用啊,为什么要把什么呀,我们这个呃,当前管理的类的对象传进来,和它的类传进来,就是因为我们除了管理当前的成员之外,还可能会借助那个管理类中的其他成员做一些依据,判断依据或者操作依据之类的信息,明白了吗?这就是关于我们描述符的一个介绍。当然解释到现在也不是所有描述符的一个内容,而只是一种描述符,那当然咱不着急啊,先把第三个描述方法给大家写一下,第三个魔术方法是这样的啊。
42:04
下线下线de啊,下线下线这个魔术方法依然是有这么五个操作需要注意啊,那么它是在删除啊删除。删除对象成员的时候出发,然后呢,对成员的值进行删除管理呗,删除管理然后呢,它只有两个参数,没有第三个返回值没有啊设置的时候,这个要删除的时候啊。删除值的时候也是要删这个临时变量。好了,关于描述符的最基本操作就为大家介绍完了,那么本小节讲完描述符之后呢,给大家来讲一个和描述符非常容易混淆的内容啊,什么内容呢?描述符和属性。模式方法。那么在这里边啊,大家学过了属性模式方法了,属性魔术方法相关的不就是这五个吗?Get attribute,对不对啊,有这么几个,有get。
43:05
Attribute有get下线下线啊,我就写吧,Get at t at tr下线下线,还有下线下线下T。下划线下划线set at t下线下线,还有我们的下线下Del下线下划线对不对,这是属性。魔术方法啊,或者属性相关方法,而我们的描述符。啊,描述符它本身是一个类,本身是一个类。是一个类,这个类里边也有三个魔术方法,分别是什么呢?分别是下线下线不不太对啊,是我们的下划线,下划线get。然后下划线下划线set set和下划线下划线delete这三个对不对?大家非常容易混淆这两个内容,这两个内容千万注意,描述符是什么特征呢?来给大家记录一下啊。
44:10
给你做一下区分描述符,它非常大的特点,只针对于某一个属性的,叫它的作用是。啊叫做纸,或者叫仅仅啊,仅仅针对某一个属性的完整设置,仅针对某。一个属性或者叫成员的设置啊,成员的设置。而且这个类可以这个描述符可以多次使用于不同的类。描述符可以对不同的类使用。因为大家也看到了,我们要是完全是一独立的类,是不是只不过什么呀,在下面交接的时候,我交给了username或叫email的一个username,那我也可以交给别的,是不是你有email有用户名,那别的就没有用户名了,你的百度呀,你的腾讯呢,是不是都有用户名,你都可以交给这一个类的对象来管理,所以描述符它的复用性更大,而属性方法呢,这个大家知道,它一定是写在那一个类里边的吧,是不是?所以关于属性描述法,它是针对当前啊,它是注意看了是针对当写错,它是针对当前。
45:27
类所有成员的管理啊,类或者对象嘛,类或者对象上面也写的。内核对象啊,但针对于内核对象。看看出去了吗?一个是针对某一个,一个针对所有,另外一个就是这个属性魔术方法仅对当前类有效啊,仅对。当前类有效,所以大有效,所以大家看到它们的功能实际上有重合的对不对?但实际上它们的应用和作用范围是不太一样的,这就是区分属性魔术法和描述符的一个最大的区别啊,那就看你到时候要怎么用了。好了,那关于描述符这一章节呢,就为大家先介绍,到这里边儿还没有完,我们还有两种另外的魔术方法要在下一小节中为大家介绍,好吧,好了,感谢大家收看,我们下小节再见。
我来说两句