00:00
好,呃,刚刚我们说了一下属性的私有化,那以后我们类中的私有属性我们就统一用一个单下划线开头就行了,哎,表示我们这个属性是私有的,嗯,但是其实还有一个地方比较麻烦的就是我们现在这个类去定义完了以后呢,我们要想去设置属性,哎设置属性我就得调S方法,我要想读取属性呢,我就得去调get方法,哎,虽然它确保了我们这个数据的安全,我们属性的安全可以控制我们的,诶数据的可读可写对吧,确保安全,但是。他很麻烦。你会发现我每一次要改一个,我要调一个set方法,我要读一个呢,我要调一个get方法,用起来十分的麻烦,那我们有没有一种方式可以让我们这个方这个用起来更简单,你就说我定义的时候麻烦一点,我不怕了,我写盖内蒙就盖内蒙,S内蒙就S,我定义的时候麻烦就麻烦吧,但是我希望我用的时候干嘛呢?哎,还是像属性一样用。
01:08
哎,还是像属性一样用,但是实际上用的是什么呢?是方法,我能不能实现这么一个功能呢?哎,那这个也是可以的,那在这儿我们来看一下,直接来写一下保存,我们这还是叫做一个封装啊零七继续来说我们这个封装特点啊,封装是我们面向对象,这是我们说的它的第一个特性,那这个类呢,我们还是叫做一个这个叫做一个这个person吧,我把这个类直接复制过来。这是我们这个原来的一个类对吧,原来的一个类它里边这是都是name,都是name,那注意了啊,现在我先把这个set给删了,我们直接来看这个get,那这个时候呢,这个get我实际上我这直接把它改成一个name是不是也可以啊,也就是说我直际上这个函数这个方法就叫name可不可以啊,哎,可以我们来看一下效果,嗯,我们直接来一个什么呢?来一个P等于一个这个person person呢,我们这来一个猪八戒,猪八戒然后在这儿我们直接,那我要想获取name,那这里边我就直接什么呀?诶直接来一个p.name加一个括号,一保存一执行是不是就获取到猪八戒了,诶那这个时候它还是调用这个赛点方法,我们直接打印一个啊,打印一个,诶get方法啊,来一个get方法执行了啊执行了这一保存,我们这一执行是不是get方法执行了,哎,我们通过get方法获取到了什么?获取到了他的这个名字叫猪八戒,这是没问题的,诶那你会发现这样写我这个是不是就有点像一个属性了,哎P点一个属性,如果没有这个括号是不就有。
02:35
是等于我再去操作这个内幕属性啊,哎,如果没有括号,那我们就想了,我先把这注了啊,把这个打印方法注了,那我能不能说没有这个括号呢?我觉得写这括号还是很麻烦,我现在我不想写这个括号,我能不能把这括号省略呢?哎,可以怎么办?那注意了,我们可以在我们这个方法前边我们加一个装饰器,什么装饰器呢?这个装饰器的名字叫做一个property,诶p p property什么意思啊,属性啊属性,那这一块注意这个property干嘛呢?诶,Property。
03:13
哎,Property装饰器,哎装饰器用来干嘛呢?哎,用来将我们的一个什么呀?诶一个这个get的方法啊,一个get的方法,诶转换为什么呢?转换为一个我们这个什么呀?诶对象的这个属性啊,对象的属性,那我们说了,添加完我们这个property装饰器以后。装置器以后我们可以什么呢?哎,我们就可以像什么呢?哎,像调用属性一样,哎使用我们这个get方法啊,使用get方法,那现在来看我没有做任何事,我就是加了一个property,那现在我们先看看有没有问题啊,有没有问题,我这一执行干嘛了,上来报错,告诉你s t object is not coll,也就是哎叫做它是不能调用的啊不能调用的什么意思,不是一个方法怎不能掉了,那注意了,你加上property以后就不能掉了,因为它包装以后,它没有返回这个方法,它返回的是一个值,那这个时候你就直接p.name啊,p.name这一保存走一个是不是就获取到猪八戒了,哎就获取到猪八戒了,那这个时候注意了,那他是不是去调用的这个方法去获取的呀,怎么看呀,哎,我把这个注释打开,如果它是调用的方法,是不是就会执行了,诶就会执行这一保存,我们一走是不是猪八戒啊就出来了,那就是这样一个效果,这方法是不是也是执行了,哎也执行了。
04:36
也就是说我在这儿去用p.name实际上就是在干嘛,诶实际上就是在调这个get方法啊,就调这get方法,那这个是比我们要get name或者直接name加括要省事一些啊,诶省事一些,方便一些,并且它还有一个优点,什么优点呀,那这个时候我一想,诶我这在去读取一个属性对吧?干嘛呢?诶我直接写一个来一个p.name等于一个这个孙悟空干嘛呀,我直接是不是给属性赋值啊,诶我这一执行干嘛了,报错了,人家告诉你不能设置attribute,也就说这个属性干嘛不能设置,为什么?因为在这儿我们说了,我只给他提供什么get方法,这是不是只提供了get的方法啊,而没有提供get方法,所以这个时候这个值是设置不上去的,所以你这一发现设置干嘛了,就报错了,那你会发现这个比我们那种更方便一些,因为这个时候你一设置我是不是直接就给你报错了,诶更灵活更方便一些,诶那同学说了,那我要想设置怎么办呀。
05:36
哎,设置,那首先你要提供一个什么,你要提供一个set方法啊,Set方法同样,那注意get方法set方法的名字是一样的,都要干嘛,跟属性名是一样的,那注意啊,使用我们这个property,哎,Property,诶装饰的这个方法必须什么呢?诶必须和我们属性名是一样的啊,是一样的,你说你属性叫name,你的方法叫叫叫name get方法,Set方法都一样,那这里边同样也叫什么呀,你也要叫一个name,只不过这个时候你这是一个什么呀?Set方法,一个self里边还要传一个什么呀?哎,传一个name,传一个参数进来,那这里边你要做的事就是一个self,点一个下划线,Name等于name是要对它进行赋值啊,哎,赋值那注意了,你光在这写还不行啊,光在这写还不行,那我们来说一下我们这个set方法的装饰器set set,哎方法的一个装饰器,它是怎么用的,它是一个艾。
06:36
后边是什么呢?属性名啊属性名,然后点一个set t呀啊属性名点一个C,那现在我们来看我们这个属性名叫什么,属性名是不是叫name呀,所以我后边跟着一个艾一个name点一个set呀啊name点三,那现在我就等于给他指定了一个什么呀,塞的方法啊塞方法那这个时候我们再看我去设置能不能设置了,一执行呃这块报啊忘写一个冒号方法,后边忘写冒号啊再一执行来看是不是就改了,哎名字就改了,但是注意了,看着是不是像给一个属性直接赋值啊,哎,看着像在给一个属性直接赋值,但是注意在我赋值的时候,实际上掉的是谁,掉的是我们这个S方法,哎调用了这一保存一执行是不是塞的方法调用了,哎,所以这个两个装饰器,一个是property,一个是叉叉点,一个S,它的。
07:36
作用就是什么?哎,作用就是让我们用一个性的方式去干嘛,哎属性的方式去操作我们什么呀?哎,去操作我们这个方法啊,操作我们这个get,还有get还有这个set方法,那这样是不是就更方便一些,哎我用的时候是没有任何感觉的,就是直接在调用一个属性,但是实际上用的是什么?用的是方法啊用的说法,当然我这里边如果有多个,比如说我这还有一个H,还有一个H,那我这块self这还得再加对吧?Self self点一个这个下划线一个这个什么呢?Age等于A,那这个时候我是不是也要给age指用这两个方法呀?哎,那一样先来一个property,来一个property方法,诶这个类名呢,类名我们叫做一个age,属性名我们叫做一个age,对吧?这个是我们的一个这个。
08:31
哎,就直接return self点详限edge就可以了,这是我们的一个这个edge这个属性,然后在这我们是不是还要一个edge,点一个S,诶CI我们这也是定义一个这个edge edge呢,这里边我们需要来一个这个edge啊,这我们直接来一个这个self,点一个下划线一个edge等于H,这样是不是OK了,那注意了,这一块你属性名是什么,你这就写什么,那好,我这传一个H,我这来一个18,我们这来看看能不能获取到H p.a这一保存走一个年龄是不是也有了,哎,年龄也有,当然我这也可以去改,直接来一个P,点一个A等于个28,一保存一执行是不是也OK了,诶,也OK了啊,所以在这儿我们可以使用这种方式去设置属性啊,这也是我们推荐使用的一个方式,用起来更加的方便,但是定义的时候会稍微麻烦一点,因为你还要写这个装置器,但是用起来会非常的什么呀方便,并且干嘛呀,哎,你说我不想写了,我就不把S,不想让它改不写S,这样它改的时候还会报错。
09:31
错,哎,会有一个提示,这样其实更好一些啊,更好一些,但是注意了,我如果说提供C,但是不提供get行不行,哎,我们来看看一执行干嘛了,这块是报错了,告诉你name age is not DeFine,那注意了,他俩是有一个递进关系的,如果你要整C,你必须得有什么呀,有这个get,哎,你仅有C没有get是是不行的,因为什么呀,你要想改它,你最低你是不是得能读啊,你连读都读不了,那你怎么改?所以这里边注意啊,Get是必须的啊好,那这个是我们说的一个property,这个装饰器啊,这里我们还是来停一下。
我来说两句