Python父类和子类关系/继承
#!/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父类和子类关系/继承的更多相关文章
- python——父类与子类的一些说明
Python中类的初始化方法是__init__(),因此父类.子类的初始化方法都是这个,如果子类不实现__init__()这个函数,初始化时调用父类的初始化函数, 如果子类实现了这个函数,则要在这个函 ...
- 关于swift使用CocoaPods倒入三方库的framework后父类倒入子类无法继承的问题
今天开发项目的时候遇到这么一个问题在使用cocoapods倒入了三方库后我在BaseController中倒入三方库,其余controller继承自basecontroller,然而在继承的子类中无法 ...
- Python父类调用子类
首先说明,上面的标题其实是不正确的,Python是一门解释型.动态数据类型的高级语言,运行时,动态判断调用对象,其实还是子类自己在调用自己的方法或属性. 举个例子(copy过来的):SocketSer ...
- python父类调用子类了解一下
class B(): def __init__(self): pass def start(self): print(self.parse()) class A(B): def __init__(se ...
- c++ --> 父类与子类间的继承关系
父类与子类间的继承关系 一.父类与子类 父类与子类的相互转换 1.派生类的对象可以赋给基类,反之不行 2.基类的指针可以指向派生类,反之不行 3.基类的引用可以初始化为派生类的对象,反之不行 4.派生 ...
- Python多类继承中,子类默认继承哪个父类的构造函数__init__
[1]python中如果子类有自己的构造函数,不会自动调用父类的构造函数,如果需要用到父类的构造函数,则需要在子类的构造函数中显式的调用. [2]如果子类没有自己的构造函数,则会直接从父类继承构造函数 ...
- python的父类和子类中关于继承的不同版本的写法
Python 2.7中的继承 在Python 2.7中,继承语法稍有不同,ElectricCar 类的定义类似于下面这样: class Car(object): def __init__(self, ...
- python子类如何继承父类的实例变量?
类型1:父类和子类的实例变量均不需要传递 class A(object): def __init__(self): self.name = "cui" def get_name(s ...
- java 子类不能继承父类的static方法
先来看一段代码 /** * Created by bjchengpeng on 2018/7/19. */ /**运行结果 * woof * woofaa * * woof * Basenjiaa * ...
随机推荐
- logstash设置从文件读取的重要参数说明及如何强置重新读取
问题描述: 如果运行logstash时从文件读取数据时,就会遇到一个问题,如果读取的目标文件未经修改,而仅修改了conf文件,则即使重新运行logstash,或是执行时使用-r时输出也无法更新. 解决 ...
- Unity 随机房间地图生成
无论是在迷宫还是类似于地牢的游戏地图中,利用程序来生成每次都不一样的地图是一件叫人兴奋不已的事. 这时我们需要解决两个非常重要的随机事件: 1.在一定范围内随机出各不相同但又不能互相重叠的房间 2.优 ...
- vim-1-window,buffer and tab
Summary:A buffer is the in-memory text of a file. A window is a viewport on a buffer. A tab page is ...
- .NET Core中创建和使用NuGet包
在.NET Core的项目中,如果我们要在项目中引用其它DLL文件,不应该直接在项目引用中添加DLL文件(虽然在.NET Core项目中也可以这么做),建议是去直接下载DLL文件所属的NuGet包.这 ...
- 模块 os 系统
os系统 os模块是与操作系统交互的一个接口 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删 ...
- jvm的类加载机制总结
类的加载机制分为如下三个阶段:加载,连接,初始化.其中连接又分为三个小阶段:验证,准备,解析. 加载阶段 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后再堆内创 ...
- 201771030106-葛佳诚 实验一 软件工程准备-<初读《构建之法——现代软件工程》有问>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 作业要求链接 https://www.cnblogs.com/nwnu-da ...
- IO 模型知多少
1. 引言 同步异步I/O,阻塞非阻塞I/O是程序员老生常谈的话题了,也是自己一直以来懵懵懂懂的一个话题.比如:何为同步异步?何为阻塞与非阻塞?二者的区别在哪里?阻塞在何处?为什么会有多种IO模型,分 ...
- ssm整合简单例子
1.首先新建一个maven项目 2.在pom.xml文件中加入以下代码引入包 <properties> <project.build.sourceEncoding>UTF-8& ...
- 29 collection 集合体系结构
/*collection:采集 * ArrayList * 集合的体系结构: * 由于不同的数据结构(数据的组织,存储方式),所以Java为我们提供了不同的集合, * 但是不同的集合他们的功能都是相似 ...