#!/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', '') 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', '') 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不一样,他们是自动调用父类构造函数的。
'''

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

  1. python——父类与子类的一些说明

    Python中类的初始化方法是__init__(),因此父类.子类的初始化方法都是这个,如果子类不实现__init__()这个函数,初始化时调用父类的初始化函数, 如果子类实现了这个函数,则要在这个函 ...

  2. 关于swift使用CocoaPods倒入三方库的framework后父类倒入子类无法继承的问题

    今天开发项目的时候遇到这么一个问题在使用cocoapods倒入了三方库后我在BaseController中倒入三方库,其余controller继承自basecontroller,然而在继承的子类中无法 ...

  3. Python父类调用子类

    首先说明,上面的标题其实是不正确的,Python是一门解释型.动态数据类型的高级语言,运行时,动态判断调用对象,其实还是子类自己在调用自己的方法或属性. 举个例子(copy过来的):SocketSer ...

  4. python父类调用子类了解一下

    class B(): def __init__(self): pass def start(self): print(self.parse()) class A(B): def __init__(se ...

  5. c++ --> 父类与子类间的继承关系

    父类与子类间的继承关系 一.父类与子类 父类与子类的相互转换 1.派生类的对象可以赋给基类,反之不行 2.基类的指针可以指向派生类,反之不行 3.基类的引用可以初始化为派生类的对象,反之不行 4.派生 ...

  6. Python多类继承中,子类默认继承哪个父类的构造函数__init__

    [1]python中如果子类有自己的构造函数,不会自动调用父类的构造函数,如果需要用到父类的构造函数,则需要在子类的构造函数中显式的调用. [2]如果子类没有自己的构造函数,则会直接从父类继承构造函数 ...

  7. python的父类和子类中关于继承的不同版本的写法

    Python 2.7中的继承 在Python 2.7中,继承语法稍有不同,ElectricCar 类的定义类似于下面这样: class Car(object): def __init__(self, ...

  8. python子类如何继承父类的实例变量?

    类型1:父类和子类的实例变量均不需要传递 class A(object): def __init__(self): self.name = "cui" def get_name(s ...

  9. java 子类不能继承父类的static方法

    先来看一段代码 /** * Created by bjchengpeng on 2018/7/19. */ /**运行结果 * woof * woofaa * * woof * Basenjiaa * ...

随机推荐

  1. ubuntu 16.04安装mysql server入门

    1.安装mysql-server -> sudo apt-get install mysql-server 输入root密码即可 2.修改服务器配置 默认mysql-server只对本机访问,新 ...

  2. bluekeep漏洞(CVE-2019-0708)利用

    前言 上个月爆出exp的一个高危漏洞,跟风复现一下下...( ̄▽ ̄)~* 简介 Windows再次被曝出一个破坏力巨大的高危远程漏洞CVE-2019-0708.攻击者一旦成功利用该漏洞,便可以在目标系 ...

  3. 文献名:Repeat-Preserving Decoy Database for False Discovery Rate Estimation in Peptide Identication (用于肽段鉴定中错误发生率估计的能体现重复性的诱饵数据库)

    文献名:Repeat-Preserving Decoy Database for False Discovery Rate Estimation in Peptide Identication (用于 ...

  4. Hive学习笔记六

    目录 查询 一.基本查询 1.全表和特定列查询 2.列别名 3.算术运算符 4.常用函数 5.Limit语句 二.Where语句 1.比较运算符(Between/In/ Is Null) 2.Like ...

  5. re模块——正则表达式

    import re re.findall('\w','abc123_8()-=') \w:字母数字下划线 \W:非数字字母下划线 \s:空白字符 \S:非空字符 \d:整数数字 \D:非整数数字 \A ...

  6. Fast Enumeration

    在 Objective-C 2.0 中提供了快速枚举的语法,它是我们遍历集合元素的首选方法.它具有以下优点: 比直接使用 NSEnumerator 更高效: 语法非常简洁: 如果集合在遍历的过程中被修 ...

  7. 树莓派 Raspberry PI之GPIO

    树莓派 Raspberry PI之GPIO 树莓派各版本硬件原理图:https://www.raspberrypi.org/documentation/hardware/raspberrypi/REA ...

  8. VMware pro 15.5安装教程

    一,安装 1.VMware pro 15.5 下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evalu ...

  9. STM32F103ZET6通用定时器

    1.通用定时器简介 通用定时器是由一个可编程预分频器驱动的16位自动装载计数器构成.通用定时器可以应用于多种场合,如测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM).使用通用定时 ...

  10. Docker学习之搭建nginx环境

    前言 很久没写随笔了,今天我们来学习一下如何在docker搭建nginx环境吧! 一:下载镜像,使用docker pull拉取最新的nginx镜像 命令:docker pull nginx 查看镜像: ...