00:00
好了,同学们大家好,那么这一小节继续为大家讲解描述符的内容,那上一小节中我们已经给大家讲解了描述该怎么做是不是?那实际上啊,描述符除了我们上节讲的那种方式之外,还有另外两种描述符的设置方式,好,我们来给大家看一下另外两种该怎么使用呢?首先在里面给大家新建一个文本文件,我们写上描述符。二好吧,第二个啊,然后呢,在上一节课的描述符当中,我们了解了一个内容什么呢?描述符中。的什么组成,其实就那么几个东西,大家应该也知道了,有一个临时变量对不对啊,这个变量自己定义就可以了啊,自己定义就可以了,自己定义就可以了,然后呢,还有三个魔术方法。下线下线set魔术方法下线下线set魔术方法和下线下线delete魔术法下线下线魔术方法,当然这个delete大家千万注意,非常容易混啊,因为我们delete它一个DL对不对,然后呢,在这里边get干什么事呢?管理获取。
01:07
获取值,然后呢,Set则是管理设置值,Delete它是管理删除值的操作。那么我们的描述符组成是不是这些啊,好,正是因为我们对描述符有一个内部组成的了解,所以描述符可以进行变化啊,来描述符的第二种格式,描述符的第二种格式,第二种格式什么格式呢?组合格式大家都知道啊,我们的第一种格式里边啊,大家能看出来最大的特点是什么东西呢?它是由两个类组成的,对,给大家看一下我们之前讲的第一种格式啊。在我的第一种第一种,在我们的第一种格式里边,明显有一个什么呢?有一个描述符的类,对不对,还有一个什么呢?被管理的什么呀。
02:02
类,被管理的成员的类有这么两个类组成,而我们第二种方式是将描述属于被管理的类合二为一,明白了吗?所以我们第二种格式,它是描述符容。和到我们的被管理的成员类当中。好,我们依然以我们之前的email为例,行不行在里边新建一个文件,Test文件啊,Dscriptp啊。Script pd,好二啊,不能一啊,已经存在了,咱是不是写第二个,好了,我们依然在这里写一个邮箱类,什么行,声明一个邮箱的类。邮箱类。邮箱好,Class email。我们之前写email类的时候呢,有成员属性以及成员方法对不对,成员属性和成员方法属性呢,我们有用户名user name。
03:08
User nameme user name,随便写一个值吧。好,写一个匿名用户,哎,还有什么密码对不对。PSSWRD啊,Password等于一二三四五六七八九十,随便写吧,还有什么电话这的我就不写了,好吧,然后方法呢,咱也分配两个l log啊,一个方法print,这是我们的登录方法。这是我们登录邮箱的方法。还有一个退出的方法,对不对,我们再写一个啊dflolo JO啊lookout,它是退出邮箱的方法。退出邮箱的方法。好的方法好了,那我们邮箱类就存在了,那我们之前干什么事啊,我们第一个描述在写的时候,前面是不是写了一个单独的描述类。
04:08
是不是描述福的类,那么这个时候我们当时写的class de对不对,是这么写的,然后呢,里边有什么成员呢?诶就我们刚刚说的,里边会有这么四个东西啊,会有什么四个内容。会有这四个内容,当然具体的我就不给大家再写一遍了,因为也没有必要。所以呢,这四个内容呢,大家能了解是不是原来是不是有这么四个内容啊好了,有这四个内容之后,我只需要把这四个内容干什么事呢。写在我自己的邮箱类里边,实际上也可以设定出一个专门对自己类有用的一个描述类,这样也是可以做的啊。好,我们来看一下这种方式该如何来完成我们的描述分类呢?把上面这个注释掉啊,这个只是做一个参考而已,把上面这个注释掉。好,我们原来里边会有这么四个内容,然后我们就把这四个内容全部提取到我们的当前用户类里边,首先呢,干什么事呢,要有一个临时变量是不是,然后自己定义就可以了,行,我在这里边添加一个临时变量啊,临时变量一般在构造方法或者住方法里添加嘛,是不是来我们的初始化方法,初始化一般在初始化方法里加啊。
05:24
方法。好,DF下线下线init。下限下限考上框,然后呢,在这里边我们声明一个临时变量4.gmp为二啊,等于一个你随便写什么东西,比如说咱就叫它匿名用户行不行。叫他匿名用户别着急啊,匿名用户好,这个有了,然后呢,干什么事儿呢,还需要什么东西呢?这个获取值的操作,当然因为你不是单独定义的描述福类,所以它的名字实际上啊,你是可以自己定义的,比如说我在这里边啊,设置了一个叫什么呢?管理获取的。
06:07
描述符的方法,咱叫它,呃d get your name行不行,多好多简单get name叫什么名啊,随你便pass一下,但是要get一定能看出来对不对,然后呢,还需要一个什么呢?还需要一个管理设置啊管理设置。叫做描述符的方法啊,应该管理描述符设置的方法。啊,都一样啊EF咱加它set you name行不行,反正管理用户名吧,咱加它set you name好也pass一下,然后还有一个管理删除啊管理删除。的方法啊,反正是管理描述符删除的方法吧。描述不删除的方法,OK,咱叫它d delete delete表。
07:02
然后呢,Pass一下好了,那么大家看我们原有的描述符中的内容啊,临时变量啊,这三个操作呀,我是不是在当前email类里边都写出来了,是不是那写出来了一个问题就是,哎,都是有了,也就是说我又当email类,又当这个描述福类,那我怎么交接呀,没错,当我们把两个类合二为一的时候,交接工作把它注掉,User在内的交接需要在所有的方法设置完成之后。在这最后加一个就可以了啊,你当你写这也行,写这也行,无所谓啊,比如说我在这里边写吧,行交,这是我们干什么事呢?将成员交接给将成员交接给描述服管理,那么这个时候直接写上user name等于等于什么?你总不能实例化一个自己吧,是不是?所以确实不能这么写,为了什么呢?让我们可以把描述类与我们的这个真正的类干什么事呢?融合到一起,我们的Python提供了一个描述符专用的函数,叫做property。
08:15
Property方法它干什么事呢?需要传入四个参数,分别是什么呢?你对当前成员进行叫做获取的方法啊,获取的方法。你对当前成员进行设置的方法。以及对当前成员进行删除的方法,你需要这么传进来,很多成员不是有四个吗?最后一个是文档啊,最后一个是文档,你可以写一个空或者不传,一般情况下我们是不需要设置的明白,所以大家了解一下,那么这个时候我们其实就将描述符与什么呀,我们原有的email类两个融合二为一了,两合二为一了。给大家写一个注释部分吧,比如说这个区域。
09:03
这个区域啊,其实就是描述符的区域啊。描述符使用的区域。写错了,其余啊,从这开始到哪结束呢,诶。是不是到我们删除这块结束啊,啊,这里面其实都是描述副专用的区域啊。这是end start。ST啊,也是描述符的内容其实都在这里面写,是不是啊,好,那这样的话,我们要考虑到这个描述符它能用吗?是不是不知道,所以我们依然要盖习进行一个真正的操作啊。这个交接工作还得留着啊,我们在下面干什么事呢?内的最外面啊,来到内外实例化对象。好在内外部实例化对象,我们在这里边直接写上一个ma,等于email,好看看是不是这句话对象了,要干什么事,进行获取操作啊,获取用户名操作,获用户名的操作。
10:05
怎么获取呢?无非就是直接啊print方上括号没对象,点右杠令,那么我们能获取到吗?右键运行程序,大家会发现,哎呀,返回值是那或者说是,诶给了一个nu的值是不是?这啥意思呢?其实就说明什么呀,你没有拿到我们用户名的真正值,很多时候为什么呀,很简单呀。因为你get的name里边啥也没写呀,Pass呀,是不是很多说那我在里面是不是加return值就可以了,没错,你看return一个123再次获取啊,右键运行一遍。123是不是就出来了?咦,乍样一看,描述符真的是生效了,是不是?只不过大家有疑问说为什么我这个描述符里边只有一个servef参数?很简单啊,原来的描述符里边会有三个,那是因为描述服类和原有管理的类是分开的,你现在是不是直接描述符身处在当前类中啊,压根就不需要往里传,所以这里边只有一个SF啊,只有一个S。
11:05
这个是千万注意啊,注意的参数啊,只有一个不是之一啊,叫只有一个self就够了。至于返回什么值,还是那句话,如果你希望返回你这个临时的设置的值,你就返回当前,就直接返回当前对象里边的临时变量的值,就这个值就可以了。那么这个时候我们就可以获取到。匿名用户的值了,你看是不是匿名用户,如果你对返回的值要进行设置相关管理,设置相关管理,比如说像我们上次一样啊,返回第一个和最后一个对不对,那么也很简单,和上面的用法是完全一样的啊,Result等于这个值我们返回第一个啊,返回第一个以最后一个字符中间使用,换一个中间使用横线连接吧,形象啊,加上我们最后一个字符。那么这个时候啊,效果和单独分开的没有任何区别的,又教运行一遍,是不是逆杠户,是不是不是逆一户啊那个杠。
12:07
看见了吗?或者你写个波浪线比较好看一点,是不是来右键再进行逆波浪或或那么获取操作是不是设置完了,然后获取完了之后呢,设置也是一样的道理,如果我们希望对于用户名进行设置操作来看好了设置用户名啊设置用户名。写错了啊,设置用户名,那么在这里边直接没点user nameme,等于咱就等于王老五行不行,王老五啊,王老五没问题,然后我们能设置成功吗?右键运行程序这四道汇报错报什么错误呢?参数不对,他说set the name有一个行参,但是给我俩十参对不对?所以实际上啊,在这里边的设置是需要传一个其他参数的,当然其实大家思考一下也能知道你设置的值是不是传进来啊,所以其实你在这里边传的这个谁呀,传的这个A,或者要传的第二个参数就是你未来要设置的值,王耀五。
13:06
看到没有,是不是就王老五啊,所以这个时候我们知道要设置写成V行不行,你如果进行设置操作,比如说在这里边啊,管理设置操作管理设置操作,管理设置操作。写错操作,比如说我们在这里边干什么事呢?设置任何用户名的时候,后面都给它加一个S行不行?好,那在这里边我们就可以进行一个SF,点注意看好了啊,不要来改user name,依然改它的临时变量tap VR啊,等于VL,那么这是直接给啊,这是直接给,可能说那这是给成是没给成啊,这是给成了,不过没有任何的管理,只是直接给而已,然后呢,如果为了检测你设置的结果是否有效的话。你可以在这里边再次打印一遍嘛,是不是。啊,不过打印出来是应该是玩波浪线舞嘛。是不是王波兰仙舞好,如果说我们希望在设置的时候,比如说我在设置的时候加一些值是不是,那你就可以在这里边啊,设置操作的时候给它默认加一个值,比如是咱是不是加一个萨是不是好,没有问题,右键运行一遍,那么这次获的是其实本身应该是王老五萨马,但是因为你获取的时候是只要第一个和最后一个字符啊,所以应该是王波浪线啊。
14:19
来右键运行一遍王不了线啊,是不是设置也成功了,是不是那么删除依然是一个道理,来把这里边往下拉啊,我们在这里边往下拉一下。注释要设置来看一下删除相关操作。好,删除相关操作,删除啊,删除用户名。删除用户名,我们在这边直接Del啊DL什么呢?me.username.username这样的话它就会。干什么事啊,没有任何反应,很多说是删除成功了还是没成功了,肯定没成功啊,来不认我们mail mail点又。
15:03
Me,你会发现其实这个后面还在啊,看到没有,是不是还是第某库在之前是什么样,之后还是什么呀,因为删除的时候,呃,你的描述符类的删除操作啊,就是我们上面这个删除之后,它没有任何作为嘛,所以你会发现不好意思弹出这个了。你会发现他们右键运行的时候没什么区别嘛,根本就没删掉是不是,如果说你希望删除掉,那么怎么办呢?那就在这里边管理删除操作喽,来管理删除操作,那么管理删除操作的时候能不能删,要不要删是不是,你可以做一个判断,比如说我一定能删,那就Del。四点。点TMPVR来右键运行一遍。看见了吗?是不是删除掉了,只剩一个了,是不是这确实删除掉了,如果说很多时候我要做判断行不行,像第一个一样做判断可以啊,你可以在我们最开始的当前类里边加一个什么呀,是否允许删除的一个标志,是不是,是否叫做是否允许删除的标志啊,比如说我们还是叫原来的名字,不行,叫做is al,相信you name等于true啊,True是让删行不行,False是不让删好了,那么能不能用呢?可以啊,在判断的时,在删除的时候,无非加一个判断就可以了,If,他都说我怎么拿进来呀,拿进来啥,你本来就在里边嘛,直接s.is below到name是不是在里边,如果等于等于two允许删,那我就删掉它。
16:38
不允许删我就不删呗,所以现在我们设置的数你是会发现它是真能删掉的,所以最后一次访访问的是会报错,但是如果你将这个操作写为force,就不允许删这个成员,那么你的删除肯定是删不掉了,还是两次匿名用户。看见了吗?接下下来的话,第二种方式我想大家应该也了解了吧,将两个融合到一个去好了,来接下来描述符还有一种方式则是第三种方式,来第二种方式呢,我们知道把它融合到一起了,是不是其实第三种描述符也是融合到一起了,描述符的第三种模式。
17:17
描述符的第三种格式,第三种格式还是把描述符就融合到被管理的类当中去了,但是它不一样的地方,它用的不是这里边,大家知道它使用的是什么呀,Property函数吧,是不是使用了P函数来进行整合的,而在第三种格式里边,它是用装饰器啊,使用。装饰器语法啊,使用装饰器语法组合很多,装饰器是啥呀?别着急,讲完这个就到装饰器了。来,大家先学怎么用好不好,那么在这里边右键新建第三个开文件啊,依然是描述符。
18:02
好,描述出三,然后呢,我们把第二个的邮箱类给大家干什么事呢?复制一份过来啊,当然我们只要有用的部分算写一份吧,声明一个邮箱类啊,Class email这个没什么变化啊,然后呢,在这里边我们加一些成员属性和成员方法。乘元属性写错了啊,叫乘员属性和乘员方法,成员方法呢,我们依然使用最后面这两个就可以了,反正是在一个位置给大家模拟一下好不好。还方法,还用这个咱也不变啊,属性的话咱也是随便加两三个吧,还是用用户名行不行,来user nameme啊,等于匿名户,匿名用户,然后呢,再来一个密码吧,Pssw RD password,等于一二三四五六七八九十随便啊好,就这样了,然后这种方式我们该怎么样写描述符呢?那么还是老规矩,你依然要了解描述符的组成,是不是还是这四个东西啊,是不是管理获取,管理设置,管理删除,还有一个临时变量,行,没关系,咱就把这这些东西都拿到当前类里边来写一下好吧。
19:12
先不给上面做个标志把它摆了,这四个东西,首先离时变量是最简单的吧,对不对,所以DF我们下线下线iidd啊写错下线下线iid下线下线,然后呢,在这里边啊,直接写一个临时变量surf.surf.tmpv好等于一个里边写一个匿名用户行,那这样临时别量是不是搞定了。这个没有问题了,搞定啊,这个搞定。OK,然后呢?那我们后边还有,诶,我们还有这三个管理相关的方法,该怎么写呢?注意这次就比较好玩了,你想管理什么,是不是管理用户名啊,好把它注释掉,看我怎么管理的啊,在里边直接注释啊。直接注释完了之后,你想管理哪个用户成员属性,或者想成员的话,在这里边干什么事呢?直接定义一个使用当前管理的成员命名的方法,比如你要管理username,那么在这里边我就直接DEF声明一个user在name的。
20:23
桑塔。然后他说这啥玩意,这不成为一个方法,不是一个成员属性了,没有关系,我们可以在里边进行一个声明,让我们当前类或者程序知道你在管理一个成员属性啊,怎么做呢?At property。P这句话的意思其实就是将用户名啊,User nameme交给我们的描述符玻璃啊。描述符我大家其实也都知道as property是不是第二次的时候就用了,是不是好,那这个时候呢,那我们在这里边需要三个东西,哪三个东西呢?管理获取,管理设置和管理删除是不是,那管理获取在哪呢?好了注意看好了这个就是默认用作。
21:14
管理的方法。那设置和删除怎么办呢?看好了,在里边再次定义一个username。然后呢,还得再定一个pass一下,还得再定一个username,因为这里边我同时定义了三个username,但是大家也知道啊,这个username本身是我要管理你的成属性,对不对?好,那第一个我们知道它是用作管理的,用作默认获取了,是不是默认用作获取吧,获取的方法,那我设置和删除确实应该下面两个来用吧,是不是,是不是应该下面这两个,没错,确实下面这两个,那这两个怎么样区分,谁是删除谁是设置呢?看好了,用这种语法叫at干什么事呢?Use name点。设置set set表示设置器吗?意思就是哦,我这是用户名的设置相关操作,看见吗?然后呢,想删除的话再来一个at user nameme.delete。
22:14
意思就是请注意我这个username方法是username的删除相关操作,看懂了吗?删除全关,所以这样一来的话,诶,你会发现三部分又全了,是不是那个是获取的这个是什么呀。用于叫做用于我们设置的方法啊,设置的方法,这个是用于删除的方法。用于不是用户啊,用于删除的方法,所以其实就是隐藏到,也是隐藏到当前类里边是不是用于啊,只不过什么呀,这是一种新的语法啊,我们叫它语法糖,也叫装饰器,至于装饰器是什么,别着急,下一小节给大家讲解好了,我们要考虑到一个问题,就是我们这样弄了之后,它好不好使呢?答案是不知道,测试一下才知道啊,首先我们在里边需要实例化对象。
23:10
来实例化对象,好,没有问题,然后我们在里边email等于email画成框,那是不是有了,来进行先进行一个获取操作,行不行获取操作,来获取操作,这里边只打一个in,可print,我们mail对象的user name成员能不能获取到呢?右键运行程序大家会发现。是吧,那什么都没有,为什么什么都没有呢?原因还是一句话啊,就是因为什么呀,你这里边儿没有返回值,相对应的,你在获取的时候,你返回任何值啊,它就会收到这个值来右键运行一遍。看到没有,是不是收到一个零,哎呀,000整数就是零嘛,是不是比如说返回一个什么呢?呃,张三啊张三来又借运行变就得到张三。是不是就是张三,那如果你希望返回它的默认值,你就可以返回这个什么呀,临时变量了,所以我们可以在这里边直接返回它的临时变量4f.TPVR右键匿名户。
24:08
看到没有,如果你希望干什么事呢?对它的获取进行管理,管理获取操作可以在里边操作啊,管理获取操作你可在里边把这个值先拿出来整一遍再返回去嘛,是不是result等于它,比如说我们只要前三个字行不行,零冒号三,然后返回就可以了,剩下多了咱不要啊,多了咱不要右键域行列,那这次获取匿名用户匿名用呗,是不是。看见了没?是不是管理获取没问题了,那管理设置也是同样的道理啊,我们如果希望对成员进行一个设置操作,进行后面进行设置操作来设置操作。那么这个时候我们应该是没点username,等于写一个文雅点的叫今生为你偷,是不是写错了?
25:00
叫金生。为你偷?好呃,就是游戏里边比较奇比较什么呀,比较常见的职业盗贼之类的是不是,那右键运行程序大家来看报错了什么错误呢?告诉你username它参数不对,是不是两个时态一个形态啊,其实问题还是出现在设置的时候,大家知道你得传一个设置的值吧,是不是,所以它这里边也有一个要设置的值。那么你给他一个参数,这次就不会报这个错误了,看是不是没有错误了,当然大家并不知道我们设置成功没成功,答案是没设置成功啊,因为你根本就没设置嘛,是不是设置操作没完成,所以这次打印的时候大家会发现还是匿名用啊,还是匿名用,是不是因为你的设置操作虽然写了,但是你的描述符并没有实现啊,所以在这里边你要完成它的设置操作,那就直接是s.TPVR等于VL,这是不是就设置成功了,右键运行一遍。
26:01
看见没有,今生费是不是很多,说这个可能就仨字,获取的时候只要三嘛,但实际上你已经全部设置进去了,所以这是管理我们的设置操作啊,管理设置操作,具体的设置成什么样的,你就自己来做就可以了,然后还有最后一个删除了,来往下拉返回到我们的删除操作,给大家看一下。好,注释一下,注释一下,然后来给大家写一下删除操作,好删除操作之前呢,我们先获取一次行不行,获取一次当前用户名,证明是可以拿得到的值道啊来用电P写一遍是不是拿到了,然后呢,干什么事呢,我进行一个删除DL啊没点username。然后再次获取,大家来看一下,两次都能拿到,而且都一样,原因很简单嘛,因为你的删除操作里边根本就啥也没干,想了个pass对不对,那如果你希望删除它的话,那简单直接D4.tpvr,那么这个时候我把那个稻草人就离识别一删,那么谁也收不到了,所以你会发现第一次可以最后一次报错,看见了吗?是不是你报错了是不是?
27:10
Email我看啊,Email没有属性,看又被你删掉了,是不是报错了,这就对了啊,这就对了,很多说第一次有没有第一次在那呢?在上面没给你拉啊。这个报错看情况啊,有的时候在上面,有时候在下面是不是有意思了,是不是这就是我们描述符的什么,第二种和第三种使用方式,可能这些哪一个比较常用呢?我个人比较建议大家使用第一种方式啊,但是第二种和第三种有时也会出现,看你具体的使用场景,咱来决定好吧,好了,感谢大家的收看。
我来说两句