python重写方法和重写特殊构造方法实例分析(python,开发技术)

时间:2024-05-01 02:47:29 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    python%E9%87%8D%E5%86%99%E6%96%B9%E6%B3%95%E5%92%8C%E9%87%8D%E5%86%99%E7%89%B9%E6%AE%8A%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90

编写类时,并非总是要从空白开始,如果编写的类是另一个现成类的特殊版本,可使用继承,继承分为单继承和多继承。

一个类继承另一个类时,将自动获得另一个类的所有属性和方法,原有的类称为父类,而新类称为子类。子类继承了父类所有的属性和方法,同时还可以定义自己的属性和方法,这样一来就解决了类类与类之间代码冗余的问题

那么儿子怎么查看自己的父亲是谁呢?

如下所示:

优点:子类可以同时遗传多个父类的属性,最大限度地重用代码 缺点:违背伦理道德,一个儿子可以有多个爹,体现在程序中则为代码地可读性变差。

继承查找的顺序:

对象>子类>父类>父父类

举例:

根据继承查找的顺序,对象>子类>父类>父父类,先在objects空间范围内查找f2,如果未找到,再去子类空间范围内查找,最后再去父类空间范围内查找。

在既有类的基础上编写新类的时候,通常要调用父类的方法__init__(),这将初始化再父类__init__()方法中定义的所有属性,从而让子类包含这些属性。

举例:

对于上述代码,我们只是想查看子类ELectricCar是否继承了父类Car所拥有的属性,但是子类本身,我们并没有给他设置自身属性和方法。

给子类定义属性和方法:

让一个类继承另一个类后,就可以添加区分子类和父类所需的新属性和新方法了。

下面来添加一个电动车特有的属性,以及描述该属性的方法:

依然选用上面的代码:

这时,我们给子类添加了它的专有属性describle_battery_size:

下面我们主要对新添加的子类专有属性进行分析:

self.battery_size=75为子类特有属性,因此写在子类的__init__()方法后,根据子类ELectricCar创建的所有实例都将把包含该属性,但所有的Car实例都不包含它。

对于子类的特殊程度没有任何限制,模拟子类ELectricCar时,可根据所需的准确程度添加任意数量的属性和方法。

如果一个属性或方法是任何汽车都有的,而不是子类ELectricCar特有的,就将应将其加入到父类Car中,而不是加入到子类ELectricCar中,这样,使用父类Car类的人将获得相应的功能,而使用子类ELectricCar的人只能获得子类特有的属性。

对于父类的方法,只要他不符合子类模拟的实物的行为,都可以进行重写,为此。可在子类中定义一个与要重写的父类方法同名的方法,这样,python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。

举例:

假设父类Car有一个名为fill__gas__tank()的方法,他对于子类ELectricCar来说毫无意义,因此你可能想重写它,那该怎么重写呢?
可在子类中定义一个与要重写的父类方法同名的方法

将父类改写之后,输出的不符合子类ELectricCar的方法的相关行为是我们改写后的,如果不进行改写,那么则会输出不相关的属性行为。

使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多:属性和方法清单以及文件都越来越长,在这种情况下,可能需要将类的一部分提取出来,作为一个单独的类,可以将大型类拆分成多个协同工作的小类。

例如,不断给子类ELectricCar添加细节时,我们可能发现其中包含很多专门针对汽车电池的属性和方法,在这种情况下我们可以将这些属性和方法提取出来,放在一个名为battery的类中,并将一个battery实例作为子类ELectricCar的属性:

举例:

下面我们再向Battery类中添加一个方法用来描述电瓶车的航行距离:

本文:python重写方法和重写特殊构造方法实例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Flutter iOS开发OC混编Swift动态库和静态库问题怎么解决下一篇:

43 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18