00:00
接下来我们接着来说啊,还是来继续说我们的这个继承啊,十我们来说一下我们这个继承,嗯,继承呢,我们还是拿我们这个来演示啊,这个animal,还有这个dog,那现在我们用这两个类的话啊,没有写先保存一下啊,我这没有写这个扩展名继承点一个PY,呃,感恩,扩展名呢,我们需要重新打开一下啊,让我们。哎,在这来看,那这块我们写完了还是两个类,一个是animal,一个是dog,那现在我们写这两个类,诶还是我们说了继承的话,属性和方法都会被继承,对吧?但是现在我们这个类里边是没有属性啊,诶animal里边并没有属性,所以属性谈不上继承,那这样我们这儿再来animal里边干嘛呢?我来向animal里边来定义点属性,我们就定一个,诶直接定一个,我们要先整一个什么呀,诶in it it里边我们来一个这个self,我们就来什么呢?诶来一个name,这也简单,我直接来一个这个self,点一个下划线,Name等于name,也就是说我在这儿添加了一个name属性啊,Name属性然后呢,我也可以给它设置一个什么呀,诶设置一下我们这个诶get的方法啊,Get方法,我们这来一个name啊,直接return_name然后下边我们再整一个,再整一什么呀?哎,再整一个这个set方法啊,方法直接来什么呢?Name。
01:27
把一个set呀,Set我们直接定义一个这个name里边还是来一个self,诶set方法我们要传值,来一个name,这边我们要进行赋值self,哎,点一个下划线name等于一个name啊都提供好了,那现在我们这些都是方法,那这些这回就变了,刚才我们的animal里边是没有in,也就是没有属性的,现在我们的animal里边是不是加了属性了,那这个时候那注意了。我这个时候再去创建我们这个dog对象,还能不能直接去创建了,哎,我们来看看啊,直接D等于一个do等于do,我们这一保存一执行干嘛了,一上来就报错了,告诉你in it Miss,一个这个必须的位置参数叫做一个name,哎,什么意思,In少参数了啊,In少参数了,那这是为什么?那注意了,我们来说一下叫什么呢?我们这个类中的这个,哎,所有方法都会被我们这个子类继承啊,我们来说啊父类。
02:34
父类中的所有方法都会被子类继承,包括什么?包括我们这些特殊方法,那我们说了音译它是不是就是特殊方法呀?哎,Int叫特殊方法,那或者叫魔术方法,对吧?这个方法也会被它所继承,所以你虽然这写到animal里,但是由于dog继承了animal,所以这个东西它就相当于写到什么呀,写到dog里,那既然你这里边传了一个name,而你这创建的时候是不是没有传呀,哎,没有传就报错了,所以你在这儿需要干嘛呢?诶需要传一个名字,我这写一个吧,诶直接写一个我们这个狗叫做一个旺财,这一保存,这一执行,这时是就没问题了,哎,就没问题了啊然后在这儿我们来打印一下print,一个来一个地点,一个name获取下的名字,一执行,旺财这时候是不是就获取到了,诶当然你也可以去改,因为这些什么呀,诶来d.name等于一个这个小黑,诶小黑已保存走一个是不是也可以设置了,为什么可以这么改,因为。
03:34
这些诶name啊get方法它也会被继承啊,所有方法它都会被继承啊,都会被继承,那这个时候就会产生一个问题,产生一个什么问题呢?诶,那现在假如说我的dog里边。现在我们等于是原封不动的用的animal里边的属性,对吧?Name属性,那假如说我dog里边有比animal多的属性呢?有比animal多的属性呢?比如说我这里边还有一个位置,还有一个粘,那怎么办?哎,那注意了,我们也可以什么呀,哎,也可以重写我们这个特殊方法什么意思呀,你不想用它附类的in译,那怎么办呀?哎,咱们自己写一个in译不就完了吗?定义一个我们来一个下划线in it,然后这来一个这个self self,我们这定一个name,再来一个edge,然后这一走,我们这直接来一个什么呀?哎,Self点一个什么呀,点一个下划线name等于name,然后这来一个点一个下划线H等于H,是不是完事了?诶那同理,我们是不是也要给这个age去设置这个东西啊,Name的就不用设置了,Name在这设置过了,而age的我们需要再去给它重新设置一下这个get,还有这个S直接设置。
04:51
这是一个这个age,这是一个下划线age,那这是一个什么呢?也是age,这呢是一个下划线age。
05:01
那现在等于我在这儿时候就扩展了一个年龄啊,哎,年龄,那这个时候再来看我传一个吧,传一个18啊传一个18,这时候一保存,我们再打印一个地点一个配,这一执行走一个,呃,报错了,Name is not,我们来看一下。啊,这应该叫做一个什么呀,哎,Age啊,叫做一个age,一直行小黑18这个时候是不是都有了,哎,都有了,相信我这步骤稍微写的有点快,你应该能看懂,也就是说有一些情况下,我们是要继承我们父类的属性,对吧?像name我们就需要继承,但是有一些情况下,我们的子类的属性可能比父类要多,这个时候我们是不是要扩展属性啊,哎,扩展属性,但是这个时候就看到一个问题,比较麻烦了,哪呢在这。这个时候我们有了自己的in it啊,我们有了自己的in it,那这个时候还会不会调用复的in it,哎,就不会了,因为我们自己的这个in it是不是把负类那个阴译给它重写给覆盖了,哎,给覆盖了,那这个时候我们说现在父类里边只有内幕一个属性,这时候还好,只有一个还好,对吧?但是如果说副类中有十个属性,那我是不是得把这十个属性都写一遍,有100个属性,我就把这100个属性都写一遍,那这时候是不是有点麻烦呀?哎,按理说你不写不就完了吗?我不写那吗?
06:22
不写了,不写了对吧?哎,不写我们这一保存一执行干嘛了,是不是报错了,哎,报错了,这个错是因为我参数给多了,那不写name你就别给name了呗,这里先别写了,一保存一执行,诶你会发现是不是报错了,告诉你dog object has no attribute name什么意思?哎,狗这个对象没有name幕属性,为什么?因为这儿我是不是掉了一个点内呀,你不掉他看不会报错,但是现在问题就是什么问题,就是现在我dog里边有没有name幕属性,诶它这个时候是没有name幕属性的啊,没有name幕属性的,所以你这个name幕你不写也不行,你还得给他写上,但是写的话如果太多是不是也特别麻烦呀?哎,特别麻烦,那我们就希望什么呢?哎,我就希望这里边我干嘛呢?我希望可以直接,哎希望可以直接,哎调用我们这个副类的什么呀,哎,In译来什么呢?哎来初始化父类中的什么。
07:22
哎,属性父类中定义的属性什么意思呀?那现在我父类中的属性是不是由我们这个父类的音译的去调用的呀?哎,通过它去调用的,我希望是干嘛呢?我直接调用它的in it啊,直接调用副类的in it来初始化,哎就说我这些东西name幕呢,我还该传传该传传,但是呢,我不在这儿初始化,因为我父类的这个阴译是不是已经初始化过来,哎,我直接让父类的这个阴译来初始化,我不通过它来初始化,对吧?那这时候怎么办?哎,那这时候一种最简单的方式,我可以干嘛呀?那父类是谁我们知不知道?哎,负类是谁我们知道是animal,那我可以直接什么呀?Animal点一个下划线in,诶直接通过负类去调啊,直接通过负类去调,然后把这个name作为参数传进去就OK了,但是注意这么做不行啊,这么做不行,因为我们这个in是个方法,如果这个方法你直接通过实例调用这个self,你。
08:22
是不用传的,但是现在这个方法我们是不是直接通过类去掉的呀,那这个时候你还得必须传self,如果你不传它会报错啊,不传会报错,那这样我整完了,咱们来看看行不行啊,行不行,我这一保存,我们一执行走一个,呃,啊少了一个参数,我们这儿把这个旺财给他传回去。传回去,然后我们这一直行旺财18,这时候是不是也行啊,哎,那我这么写的好处是什么?这么写的好处就是我不用考虑属性了,我不用再去考虑它等于它,它等于它,它用它怎么办?我直接把父类当中的属性是不是传到这个in it里边就行了呀,诶传到in译里边,由父类的的去赋值,而我子类的在这儿我是不是单独去整就行了,哎,单独去整就行了,这样就简单一点啊,简单一点,但是这个时候会有一个问题,什么问题呢?诶注意了,我现在这儿写了一个animal,这个animal我是不是动态获取的,诶很明显animal我在这里是写死的,对吧,我是写死的,那这样就会产生一个问题,什么问题呢?如果有一天我dog的父类变了,Dog的父类变了,Dog可能它有什么有这种这个犬科动物,对吧,我让狗去继承犬科动物,而没有继承动物,犬科动物继承动物的,那这个时候我还去钓。
09:44
Anual的音译呢,这个时候合不合适了,哎,这个时候这样写就不合适,而且非常的什么呀,非常的不合适,所以千万在我们的类里边不要出现这种类名啊,不要出现这种类名,因为这样就会产生什么呀,我们称为耦合,这两个类之间的关系过于紧密,如果你这儿一换,你必须得干嘛呀,这儿就得跟着改,不然就会出问题,对吧?那我们就希望有一种方法可以来干嘛呢?可以来动态的获取到我们当前类的什么呀,副类,那这时候要怎么办?诶那这里边注意我们有一个方法叫做什么呢?叫做一个so啊so,它可以什么呢?诶可以用来诶动态的,诶直接说吧,叫做获取我们当前类的一个副类,所以在这儿我可以直接把super干嘛呢,换成把这个animal换成so,那这个就跟我写animal实际上是一样的,这个就代表什么呢?代表它的这个负类啊,代表的副类,并且什么呢?诶,那注意了,它比那个负类还有一个优点,哎,并且。
10:44
我们通过这个so返回的对象,哎调用我们这个什么呢?调用我们这个负类方法是,哎,它是不需要什么呀,哎不需要传递self啊,不需要传递self,所以这里边如果你这是通过so料的这个self,你就不用传了啊,就不用传了,直接一保存,我们这一执行是不是效果是一样的,哎效果是一样的,但是这种方法更灵活,为什么灵活呢?因为你这animal变了,你说我这个不是什么,哎不是这这个这个这个这叫animal是负类了,别的负类了,那这个时候它也是没有任何影响啊,也是没有任何影响,它会有这么一个啊,有这么一个好处啊,有这么一个好处,好,那这个就是我们说的一个这个super啊super so我们做就是来获取我们当前类的一个副类啊,当前类的一个副类,所以你在类中如果想去引用副类的对象的话,我们在这里就要用到谁,就要。
11:44
到我们这个super啊super好,这个里边我们说了一下,Super,我们在这里还是来停一下。
我来说两句