00:00
同学们大家好,那么我们这一小节依然来给大家讲一下魔术方法,在本小节当中,我们将继续为大家讲解两个魔术方法,第八个魔术方法是什么东西呢?说我们要讲一个叫下线bol啊,布尔的一个魔术方法,然后呢,学魔术方老规矩啊,从五个方向来学,把这五个方向给大家复制一下,我们一个个来进行测试。当大家学过了前面那几个魔术方,当我看到,当大家看到第八个魔方法师会有种感觉,这个会不会跟波尔转换有关?你猜的是对的,首先在这里边我们新建一个文件,给大家来写一个文件啊好,然后呢,在这里边写上名字么的。小螃蟹。Bo。好,点击OK,然后呢,在这里边声明一个类,我们声明一个什么类呢,声明一个人类行不行,Class human human human,然后加一些成员属性和成员方法。
01:02
成员属性和一些成员方法好属性在这里边我们随便加几个,比如说加一个肤色是不是color,我们写上一个黄色,然后呢,再加上一个年龄啊,我们写上一个18岁,然后呢,我们再加上一个性别是不是six,我们可以写一个啊男。或者写一个女都可以啊,当然你也可以创造创建到对象里边无所谓了,然后呢,再加上一个什么呢?呃,结婚mad啊,等于比如说有没有结婚,是不是我们选个已婚行不行。已婚啊已婚,那这样的话,我们可以把这个什么呀,把这个类名改改叫一个man对不对,这就是一个男人的泪可以吧,然后加一个方法啊,DEF表示男人会什么呢?会抽烟是不是S啊,Smoking是不是好print套上挂号啊,多数男人会抽烟。
02:00
然后呢,EF我们再写一个,再写一个C说话行不行,我们写上一个print是不是。男人男人啊,就会甜言蜜语好搞定,然后这个类写完了,我们干什么事呢?实例化一个对象,嗯,来,实例化对象。谁的话对象好,我们在里边写上一个啊,比如说我们写一个这个,呃,叫做写什么呢?写一个小小MR吧,小MR好吧,等于我们的man啊,我们创建出一个人类的男人对象,然后在这里干什么事呢?我打印给大家看看,这倒没什么东西啊。二右键运行程序啊。好,大家也看到确实是男人类的一个对象,对不对,然后呢,下面我们进行一个操作,什么操作呢?转换啊,转换对象用什么转换呢?用我们的布尔操作啊bol bol来转换。
03:01
来艾玛,然后呢,转换会有什么结果呢?不知道,我们拿个变量接收一下,并且打印一下行不行?Print套上括号,写个result,右键运行程序,我们可以发现这个程序真的真的运行了,而且结果是true,不单是这样,而且我告诉大家目前情况下或者一般情况下,一般情况下,一般情况下啊。一般情况下啊,我们的对象转换的结果,转换的结果。它默认就是处啊,默认就是处,除了一些特别的数据类型里边的值,比如说我们整形里边的零啊,字符串里边的空字符串啊,或者附件数0.0啊,有这些特殊数数值的对象除外啊,正常情况下你自己定义一个类,然后检测的话,无论它里边有没有乘员,哪怕我写的是一个空的类,你看没有,我给你写一下啊,写一个pass什么都没有检测结果它使际化的对象依然为处啊。所以我们正常情况下,只要是一个你定的对象,默认就是true,但这样的话,用波尔检测对象就显得毫无意义,对不对?那我们可以把这个什么呢?波尔对象的转换做成一种检测的功能。
04:14
怎么办呢?在这里边。好,我们干什么事呢?添加一个魔术方法,那当然是我们要讲的魔肖先肖先布尔喽,干嘛用呢?我们用来检测一个人是否已经结婚,或者是否是单身行不行?来昆这一句话我们写上啊,告什么呢?Bo方法被处发。首先我们运行程序,大家可以在程序里边看到啊,他会报错,当然你的方法确实也被触发了,报的什么错误呢?他说布尔摩式方法必须返回布尔值,而不能返回一个能什么都没有,所以呢,我们在这里边实际上是可以设置返回的结果的,当你返回一个处的情况下,我们干什么事呢?不,而转换的结果就会true被result接收,那么大家看啊,这次的预算结果依然是true。
05:04
对不对,但是当我们在布尔里边返回一个false的时候。我们result就会接收到返回的false,来右键运行程序,大家看是不是false啊,所以这样一来的话,我们就可以干什么事儿呢,在这个布尔魔术方法里边做一个什么呀判断。根据某些啊,某些数据返回不同的值啊,返回不同的布尔值,然后实现布尔转换对象的一个作用啊。实现。木耳。转换对象的作用,因为它默认情况下,我们自己选择对象,然后自己学化对象是不是都是一个什么都是一个处啊,没有用啊,但是我们可以让它有用,比如说我们现在转换对象啊,就让他干什么事呢,用于检测。这个叫做男人这个对象啊,对象是否已婚啊,男人对象是否已婚。
06:04
已婚。好男人对象用于检测男人对象是否已婚,那怎么检测呢?那在这里边啊,我们就要在这里在什么返回值之前添加一个判断了,那判断的依据是什么?但是根据它的是成员属性来决定了对不对,所以我们可以在里边这样F弹框S点。Ma ma married,如果等于,等于已婚啊,已婚。已婚写错了啊,已婚如果等于汉字已婚,我们可以给它返回一个true retain一个TE,是不是else啊,我们可以retain一个force。这就这样的话,我们就实现了布尔的一个功能,什么功能呢?如果这个男人已婚了,我们预算布尔检测的结果一定维持住。看到没有,是不是错啊,如果男人是未婚的啊,比如说这个未婚,我们写个未婚,当然写别的字也无所谓啊,如果是未婚的,那么他返回的结果则是false,看见了吗?所以我们可以用布尔实现一定的成员检测操作,在这里边我们用来检测是否什么呀,已婚是不是,当然你也可以检测他是否什么呀,是否生病,是否是黄种人啊,是不是,是否是18岁啊,是否成年啊,都可以,那就根据你自己的需求来写,这里边呢代码即可,所以我们的布尔操作就这么简单啊,用于快捷判断对象成员用的啊,它的触发时机呢,就是使用bol操作转换对象的时候啊,对象的时候。
07:39
自动触发,然后呢,它的作用就是什么呀,用于检测对象成员的信息啊,返回一个true或者false的一个操作,它有什么参数吗?它有只有一个固定的S,一个S接收当前对象而已,返回值必须有,而且必须是沃尔值。
08:05
然后注意事项这块干什么事呢?倒没什么东西啊,注意事项倒是无,嗯。这样一来的话,第八个法布尔就介绍完了,是不是比较简单啊,因为有前面几个函数做方法,做铺垫吧,然后下面给大家讲一个稍微大一点的魔术方法啊,这个大不在于它难,而在于里边处理的逻辑可能稍微复杂点,我们给大家讲一个下线,下线format的魔术方法。因为我们之前也学过format函数,对不对,所以大家其实想也能想得到是谁来触发它的,你想的是正确的,虽然你还没说,但是我已经知道了,好在里边把这个删掉。把这删掉。这个删掉。好,然后走你。然后到你,然后这个删掉好了,然后呢,为了讲这个魔方,我们新建一个魔法行不行,右建新建一个方法啊,来修建一个类的类文件啊,下线马的下划线,我们这个叫做form form。
09:03
然后点击OK,好,创建成功,然后呢,我们在这里干什么事呢?制作一个对象行不行啊,制作一个类啊,这次咱写一个姑娘的类吧,行不行,或者写一个女孩类行不行,声明一个类。声明一个类,那我们在这里边啊,Class就叫girl了行不行,然后呢,加一些成员属性和成员方法,乘原属性和乘员方法。好,我们加属性的时候,你可以加到对象里面,可以加到类里边,反正对象没有的时候会找类来索取嘛,是不是这个我们之前给大家介绍过的,我们加上什么呢?加上name是不是加上什么呢?加上名字啊叫出没。这个女孩子叫出没,是不是听着多威亚的一个名字出没啊,很可惜,这个这个女孩她爸姓熊啊,好,然后呢,Sex就不用说了,依然是一个女,对不对?好H,我们写一个18。
10:01
好就这些了,然后呢,成员方法咱就随便加几个了,比如说呃,女孩子比较爱shopping,是不是逛街。来print套上括号,买买买。买买买,然后呢逛还有吃啊,来E考上括号,我们在里边输出啊好,我们要吃烧烤。吃烧烤啊,吃烧烤吃写错了。吃烧烤。好搞定,然后呢,这样的话一个类就做完了,然后我们再来干什么事呢?实力化对象,实例化一个对象啊,我们叫熊出没。好,就等于我们的各类实例化一个对象,这样对象是不是就有了,为了实验一下,给大家看一下我们的对象是否存在,好,来,右键运行程序。大家看是不是一个个的对象就存在了,好,那在这里边我们干什么事呢?很多时候不要讲魔术方法format吗?是好,然后呢,我们干什么事呢?看好了,使用f format来操作我们的函数。
11:13
啊啊,不是什么函数啊,它对象啊,然后在里边我们写上一个字符串,因为form是不是有格式化到字符串里边,所以我们写上一个字符串啊,我们写上一个这个,嗯,这个行动action act啊写一个变量等于action写错了action。我们写上啊,叫我和我的闺蜜,不是闺女啊,叫闺蜜啊,谁?谁去什么逛街,去逛街可以吗?就这么简单,然后呢,Form面的函数大家都知道,那它其实就是字符串action啊,点for MAT,套上括号,然后在这里边是不是传入数据,因为我们这里边只有一个占位符是不是,所以你在这边写一个数据就可以传进去了,比如说我们在这里边写上我们和什么呢?我们和这个静静。
12:06
静静啊,然后呢,用变量接收最后的结果,好打印一下。现在我们写的这个字符串啊,和这些哈没有发生关系,但是大家看到这个操作应该知道,其实就是字符串里边什么呀,格式化进去一个静静,最后的结果应该是我和我的闺蜜,然后把静静传进去,对不对,静静去逛街有问题吗?有件运行程序没有问题,说是我和我的闺蜜进去逛街呀,好,这是我们之前学的方面操作,但是大家看好了,我这次不是传境进进去,而是什么呢?把这个当前实际化的对象啊,我们熊出没这个对象传进去,你猜他会发生什么情况,来右键运行程序,大家会发现我和我的闺蜜这一大长串啊,去逛街哎,好像也没有问题啊,因为这一大长串明显就是什么呀,上面对象的信息嘛,是不是。
13:01
但是大家也发现他的问题所在了,他只是和什么呀,IEPR或str一样输出了对象的一些信息,但这个信息我们用不上,我们并不希望写上我和我的闺蜜直接拿长串去逛街,而是最后我希望什么呀?写上的是我和我的闺蜜,写上她的名字,是不是去逛街呀?那这个时候我们就希望什么呢?啊,只要想把对象和form放到一起,我们选取它对象的一个属性放进来,比如说名字放进来是不是更加合理一点?于是乎我想重新定义这个format的操作,怎么办呢?添加魔术方法EF下线,下线form format魔术方法,当我们添加了format的魔术方法的时候呢?来,我们在里边打一句话,看看能不能触发啊。写上format format方法被处罚。它被触发了吗?一定是被触发了,来右键运行程序,大家可以看到这个这个操作啊,但是大家发现诶报错了,对不对?好为什么到括呢,Form面的参数不够,他说你只有一个星参啊,但是你不不只有一个星参,但你给我俩十参,所以我们这后面还有一个参数很多说这个参数是啥呀,我不知道啊,先不用管,来右键运行程序。
14:16
走,你又报错了,但是他报的是返回值,错误看到没有,他说返回值必是是字符串行,我给你一个字符串,咱就随便写个字符串方程百行不行,比如说写上一个啊陌陌行不行,然后没问题啊,然后再运行程序,但是大家也看到了,触发确实触发了,对不对?运行程序这次再看哦,我和我的闺蜜默默去逛街,这就意味着一件事情,什么事情哦,原来format魔式方法的返回值其实就会在做form妹的操作的时候,什么呀,以字母串的形式不传进来啊,那就省事了,我们是不是希望我和我的闺蜜谁去逛街,是不是熊出没本人啊,所以我们可以在里干什么事儿呢?写上它的名字嘛,名字在哪呢?是不是通过对象的name首先来找就可以了,也就是说在这里边格式化的时候,它会自动查找,它会自自动查找我们对象里边的模式方法,Format的返回值,而format的返回值又刚好是我们对象的什么呀,成员名称,所以右键运行程序,你看我。
15:17
和我的闺蜜熊出没去逛街了,是不是是不是实现了我们对象信息的一个什么呀,往里存放啊。或者对象信息和form面的转化了一个操作对不对,好像看似一切都很完美,但是大家忽略了一个东西啊,什么东西啊,参数这个东西怎么回事,说为什么这还有个A呀,这还有一个参数要我们写呢,我也没看见收的什么东西啊好,为了让大家看到我们到底收到了什么内容,我在这个触发的下面输出一句话啊,Print,我们参数arg的的的内容啊的内容是什么呢?逗号啊,我也不他直接在里边AG啊搜打印。
16:00
来右键运行程序,大家会发现什么都没有,你看触发之后说,哎呀,这个内容是什么呢?什么都没有,我都说你什么都没有,你干嘛给我写行词啊,它什么都没有哈,是因为什么呢?因为format括号里边是啥都没写,咱当时讲format的时候,大家可以回去看看form面那一节啊,我们讲form面的时候是不是跟大家说过form里边是可以加限定符号的,比如说加什么点2F呀,是不是限定小数点后两位啊,或者加什么大什么填充符号啊,走对7UD齐啊,比如说写成这样冒号啊是不是,然后呢,写上一个什么呃,A的符号啊,大于十啊,是不是可以写这种格式啊,还记得吗?也就是说哦,我们原来format没那么简单,它可以加限定符的,那这个时候当你加了限定符之后,你再运行程序,你看一下。是不是看到arg的内容是什么了,哦,也就是说我们的第二个参数arg啊,就这个参数。
17:02
Arg函数,它接收的是限定符号的符符串。限定符号的字符串,有了这个限定符号,字符串到底有什么作用呢?那你就可以按照你什么呀不同的需求来定制属于自己的限定符号了,你想限定什么功能,自己写个符号在里面实现一下就可以了,比如说系统是不是有这种功能啊?哎,艾特符号,然后呢,什么?呃,这个大于号,然后写个十,我们之前学过它应该是什么呀?哦,一共十个字符,然后呢,用at符号不够,用at符号填充原有内容,是不是靠右对齐呀,是不是这种想法?那你也可以自定义这种规则,当然我不给大家自定义了,我带着大家实现这个功能行不行?好,我们要想实现这个系统提供的功能的话,就得在提供功能之前把这两个先注意掉啊,免得影响大家提供功能之前干什么事呢?获取限定符号。因为你符号拿出来才能判断嘛,是不是好给大家看一下啊,我们在里边做这么几步操作,叫实线系,叫实现for ma format自带的自带的对齐和填充功能行不行,好大家看怎么玩啊,首先呢,我们要做第一点,第一步操作叫做接收限定符号。
18:23
接收限定啊符号,这个限定符号大家其实都知道,不就在猜数下GS里边,没错,F flag啊,Flag等于我们的arg。这个时候大家可以打印的时候看一看啊,来f flag啊,很多时候不写这步行不行,行,我写这步是为了让你看的更清楚啊,是不是这个符号有了,那在这个符号里边,大家其实知道的是什么呢?第一个符号是填充内容,第二个是对齐方式,第三个以后的这个数据是不是数值啊好没问题,来我们下面干什么事呢?做第二步。
19:00
拆分限定符号。拆分限定符号,那么在限定符号里边我们有这么几个数据,第一个是填充字符差等于什么呢?我们。F符号中的第几个呢?填充符号是不是第一个字符,就是因为这是个字符串啊,字符串也可以通过下边来进行访问嘛,所以我们写一个啊零。然后呢,D这是我们的注意啊,这是我们的填充字符。填充字符第二个是我们的对齐方式,对不对,A行不行,好嘞,等于f flag flag里边的一啊,就是这个大圆号,这是我们的什么呢?对齐方式。第三个还有什么呢?我们的数据总量或者叫字符长度啊,字符长度咱用less吧,Less l等于f lag中括号写什么呢?二冒号,很多时候写个二不行吗?不行啊,你要是限定0123456789倒没事,你十个以后的是不是100个呢?所以我们写上一个二冒号,这个时候注意看好了,我们给大家打印这三个数字让你看看啊,一个是非差。
20:11
一个是我们的啊,一个是我们的。来右键再次运行程序。大家会发现这三个符号是不是都在这摆着,是不是很多时候报错了,别管啊,返回值你是不是注释了,所以肯定会报错,所以这三个符号已经弄用弄出来了,弄出来之后啊,这是字符长度没写上去啊,这个是字符长度。字符长度好,当我们写完这个这个这个限定符号之后呢,就可以干什么事呢,就可以什么呀,根据不同的符号进行不同的填充操作。好,然后呢,在里边看我们有几种对齐方式呢?我们用有三种行不行,左对齐,右对齐和聚中对齐,所以我们在里边啊判断对齐方式,看我给你写上判断对齐方式,那么在这里边对齐方式if,如果我们的什么呢?A这个字符串它等于等于。
21:09
大于号啊,证明是什么呀,是不是右对齐呀,原有内容靠右对齐嘛,这是右对齐操作,然后呢,还有一种情况E,如果说我们的A,它不是大于号啊,而是什么呢?而是我们的叫做上箭头啊,上箭头我们就让它居中对齐,什么叫。这设置为居中对齐。然后呢,还有一种说elli,如果我们的对齐方式al啊,哎,Li,如果我们的对齐方式等于等于小于号啊,那我们就左对齐呗。我们就设它为左对齐。左对齐啊,左对齐,左对齐,如果是其他的数据是不是不写没有我们的符号没写进去啊,左对齐,当然你也可以加其他的线性符号啊,如果没有,你可以再加一个else,用来防止用户乱写字符吗?Else我们take一个什么呀,Take个空字符串就可以了,返回这例字符串,这个时间定了啊好,那接下来我们现在左右对齐已经判断出来了,下面无非就是根据什么呀,字符总数和填充字符来完善一下就可以了,我们正常情况下返回的是用户的名称,也就是return self点内对不对?
22:29
好,这三个操作都可以这么写啊,我们正常情况下返回成s.name但是大家也看了,你返回s.name的话,程序能运行吗?能啊,是不是,这我和熊出波去逛街啊,但是你的填充符号和数量就就是这个长度啊,根本就没生效啊是不是?所以为了让这个数量可以根据我们的这个判断进行一个操作,我们在返回数值的时候,会到之前做一个操作,把三面内拿过来,怎讲我们可以写上一个,嗯,叫做不是叫做什么来着?嗯,返回叫new name吧,等于s name,然后我们返回new name。
23:06
在返回之前,我们要对它进行一个操作,要什么呢?保证是什么呀?填充的时候是右对齐的啊,注意是右对齐的,就原原有内容靠右对齐,并且什么呢?并且还要填满指定长度,就是我们刚才写这个长度,而且还要特指定符号,诶这个时候大家想这该怎么实现呢。我们左对齐的时候讲过一个什么呢?L just just和center函数,大家还记得吗?所以在这里边如果是右对齐的话,实际上你可以直接占用什么呢?直接使用我们的adjust就可以对齐啊,你看啊,Adjust刚好用adjust的时候需要什么呀?长度和对齐方式,所以们把长度拿进来,Less放到第一个参数里边啊,第二个我们放什么呢?填充符号啊,当然填充符号默认不写,是不是空格啊,但是这样预习会报错的啊,很多时候会报错吗?会报错的啊来为什么报错呢?很简单。
24:03
因为你这个获取的长度实际上是一个什么呀,实际上它是一个字符串对不对,而你这里边是不是需要一个整形啊,是不是需要整形,所以你最好在这里边获取了之后,将这个字符串直接转化为整形来进行使用,来右键这次就没问题了,看见没有,我和我的闺蜜熊出没一共三个字,是不是还需要填充七个,所以我在前面加上七个at符号,并且保证熊出没是靠于对齐的,那如果说是居中对齐怎么办呢?一个道理哦,我们在这里边啊,不要直接返回这个subject name,而是在这里边声明一个新变量new。就等于s name点居中对齐,是不是应该用增函数啊,把长度和它的填充符号放进来,然后返回这个新的名字就可以包括我们最后这个什么呀。左对齐也是一样的道理啊,New name。好,New name等于我们sf.name.l just。
25:05
啊,这写的是个L吗?LGT啊,Just,它括号写上长度,写上它的填充符号就可以,那么返回的时候依然返回我们新的数据,这样一来的话,我们就实现了系统的左中右居中对齐和指定符号的功能。很多时候我不信,来我们实验一下,我们把电动符号改成多个符号,右键运行程序,你就可以发现它用多个符号来填充了,对不对,我要居中对齐,也就是说我希望这个熊出没在中间,左右两边放什么呀?左右两边放上我们这个其他的符号没问题,写上上箭头啊,就是一阳符来运行一遍。看见没有,是不是熊出没在中间,符号在左右两边,我希望原有内容靠左对齐,那么我就靠左对齐。看见了吗?形成包在左边了,我希望有什么呢?有二三十个字符长度,那么右键运行它会自动填充30个,看见没有,自动填充到30个的长度,这就一来的话,我们是不是自己定义了format对于当前对象的实现啊,对不对?哎,其实大家看这个也能看出来,实际上任何的对象里边默认也都有format,只不过我们之前学的六大数据类型的format是定义好的,但是在我们这里边自己写的一个类的话,你可以自己重改,甚至加一些自己定义的新的功能,当然你加了之后只能对当前类的对象有效啊,你对以前存在的是没有效的。
26:29
好了,这就是我们的format魔术方法的作用啊。那大家了解了吗?好了,感谢大家收看本小节内容,我们下一小节再见。
我来说两句