父类和子类关系/继承

Posted chenshengkai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父类和子类关系/继承相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File:继承_子类和父类的关系.py    
@E-mail:364942727@qq.com
@Time:2020/4/4 12:39 上午 
@Author:Nobita   
@Version:1.0   
@Desciption:父类和子类关系/继承
"""


class Car():
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.meter = 0

    def get_car_description(self):
        long_name = str(self.make) +   + self.model +   + self.year
        return long_name

    def read_meter(self):  # 读取公里数的方法
        print(This car have  + str(self.meter) +  mi)

    def update_meter(self, mileage):  # 定义了一个修改公里数的方法,以后要修改公里数的时候,就不需要通过实例化去修改属性的值了
        self.meter = mileage

    def increment_meter(self, miles):  # 新增加的公里数,做加法运算
        self.meter += miles


my_car = Car(china, audi, 2010)

print(my_car.model)
print(my_car.get_car_description().title())  # title方法语法 -> str.title() //返回"标题化"的字符串,就是说所有单词都是以大写开始。
my_car.read_meter()
my_car.meter = 50  # 通过实例化对属性的值做改变
my_car.read_meter()
my_car.update_meter(100)  # 通过之前定义的方法修改属性的值
my_car.read_meter()
my_car.increment_meter(200)
my_car.read_meter()


class Battery():
    def __init__(self, battery_size=70):
        self.battery_size = battery_size

    def describe_battery(self):
        print(这个车有 + str(self.battery_size) + 的电容量)

    def get_range(self):
        if self.battery_size == 70:
            car_range = 240
        elif self.battery_size <= 100 and self.battery_size >= 75:
            car_range = 270
        msg = 这个车能跑{}公里.format(car_range)
        return msg


class ElectricCar(Car):  # 创造ElectricCar(电动汽车)类
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()

    def describe_battery(self):
        print(电动汽车特有的属性是{}.format(self.battery.battery_size))

    def read_meter(self):
        # 父类当中的一个方法,对子类没有帮助;在子类当中,定义一个父类当中同名字的方法名,那么就会忽略父类的方法,取其精华。(重写父类的方法)
        print(这个方法是重写父类的方法,会忽略父类当中的read_meter()方法)


my_ele_car = ElectricCar(usa, baoma, 2020)

print(my_ele_car.get_car_description().title())
my_ele_car.read_meter()
my_ele_car.describe_battery()
my_ele_car.battery.describe_battery()
print(my_ele_car.battery.battery_size)
print(my_ele_car.battery.get_range())
my_ele_car.battery.battery_size = 80  # 通过实例化对属性的值做改变
print(my_ele_car.battery.get_range())

‘‘‘
super()是一个特殊的函数,它让父类和子类可以关联起来。
这段代码让python调用ElectricCar的父类方法__init__(),让ElectricCar实例包含父类的所有属性。
Python中类的初始化方法是__init__(),因此父类、子类的初始化方法都是这个,
如果子类不实现__init__()这个函数,初始化时调用父类的初始化函数,
如果子类实现了这个函数,则要在这个函数里显式调用一下父类的__init__(),
这跟C++,jAVA不一样,他们是自动调用父类构造函数的。
‘‘‘

 

以上是关于父类和子类关系/继承的主要内容,如果未能解决你的问题,请参考以下文章

Java中的继承:父类和子类的关系

Java中的继承和多态

Java学习笔记之十六浅谈Java中的继承与多态

java的父类和子类的关系都有哪些?

面向对象之继承

继承(PersonStudentTeacher)