父类和子类关系/继承

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File:继承_子类和父类的关系.py
@E-mail:[email protected]
@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不一样,他们是自动调用父类构造函数的。
‘‘‘

原文地址:https://www.cnblogs.com/chenshengkai/p/12630147.html

时间: 2024-11-04 16:06:15

父类和子类关系/继承的相关文章

python 继承/父类和子类的关系

# <editor-fold desc="父类和子类关系,继承"># <editor-fold desc="类--讲解--Car"> class Car(): def __init__(self,make,model,year): self.make=make self.model=model self.year =year self.meter=0 def get_car_desc(self): long_name=str(self.yea

1212面向对象--引用类型与值类型、命名空间与类库、继承(父类与子类)

五.引用类型与值类型 .NET将变量的类型分为值类型与引用类型.例如int和float之类的变量属于值类型,而“类“类型的变量属于引用类型. 值类型与引用类型的变量在使用上是有区别的. 值类型的变量在一定义之后就可以马上使用. 引用类型的变量定义之后,还必须用new关键字创建对象后才可以使用. 如上图,创建两个新的对象时,直接比较两个对象是否相等,返回的bool值为false.因为两个对象都是新开辟的一个空间变量,彼此没有任何关系,所有是不相等的. 如图2:1)创建的第一个新的对象ss1,给ss

c++ --&gt; 父类与子类间的继承关系

一.父类与子类 父类与子类的相互转换 1.派生类的对象可以赋给基类,反之不行 2.基类的指针可以指向派生类,反之不行 3.基类的引用可以初始化为派生类的对象,反之不行 4.派生类指针必须强制转换为基类指针后才可以指向基类 5.基类指针转换为派生类指针容易导致崩溃性错误 6.虚基类的引用或派生不能转换为派生类 class father{ //}; class son : public father{ //}; int main() { father f; son s; f = s;//正确 s =

C#父类与子类的关系

这里,我做一个整合. 这里前期要极其注意修饰符之间的关系. 1.Main调用方法,其实我也不知道叫什么,大家看代码吧. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[]

java中父类与子类的关系以及使用

java中父类与子类的关系以及使用 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有一个亲生父亲. 1.继承以及重写:子类继承父类是对父类属性和方法的全面继承,同时子类在继承了父类的方法后,可对父类的方法进行重写. public class Son extends Fat{ private int b; private String h1; public void

java中字段继承问题--子类不能继承父类的私有成员

public class Test1 { private int t1 = 1; public int getT1() { return t1; } public void setT1(int t1) { this.t1 = t1; } } 以上是Test1类,有个private的t1,值为1,给了get/set方法. public class Test2 extends Test1 { private int t1 = 2; public static void main(String[] a

构造函数的继承--子类不继承父类的构造函数,只能调用

关于子类对父类构造函数的继承: 子类必须调用父类的构造函数.默认情况下会自动调用父类的无参构造函数.如果父类没有无参构造函数,则必须显式的用super()调用一个构造函数. 创建对象时,先调用父类的构造函数对对象进行初始化, 然后再调用子类自己的构造函数 子类只继承(其实是默认调用)父类的默认(无参)构造函数,如果父类重写了自己的构造函数,就会导致父类没有无参构造函数,这样子类就不能从父类继承构造函数.

Java中子类能继承父类的私有属性吗?

前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先看下面一段代码 /** * 定义父类 * @author CBS */ public class Father { private String name;//私有属性 private char sex; public void tell(){ System.out.println(name+sex

子类会继承父类对于接口的实现

项目截图: 实现代码: 1 package exercise2; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 7 interface CircleShape { 8 double PI = 3.14159; 9 10 double area(double radius); 11 } 12 13 class Circle implemen