继承

什么是继承?

  • 编写类时,并非总要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继承。
  • 一个类继承另一个类时,将自动获得另一个类的所有属性和方法。现有的类称为父类,而新类称为子类。
  • 子类继承了其父类的所有属性和方法,同时也可以定义自己的属性和方法。

1、子类的方法__init__

创建子类时,首先要完成的是将父类的所有属性和方法继承,这里使用子类的方法 __init__();


#继承
#子类的方法__init__() class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 def get_descriptive_name(self):
long_name = str(self.year) + " " + self.make + " " + self.model
return long_name.title() def read_odometer(self):
print("This car has" + str(self.odometer_reading) + "mile on it.") def update_odomter(self,mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage else:
print("You can't roll back an odometer!") def increment_odometer(self,miles):
self.odometer_reading += miles class ElectricCar(Car):
"""电动汽车的独特""" def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year) my_tesla = ElectricCar('tesla','model X',2018)
print(my_tesla.get_descriptive_name())

执行结果:

 2018 Tesla Model X

注意点:

  1. 创建子类时,父类必须包含在当前文件中,且位于子类前面。
  2. super()是一个特殊函数,帮助父类和子类关联起来。
  3. 父类也称为超类(superclass)

1.1、给子类定义属性和方法

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

 class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 def get_descriptive_name(self):
long_name = str(self.year) + " " + self.make + " " + self.model
return long_name.title() def read_odometer(self):
print("This car has" + str(self.odometer_reading) + "mile on it.") def update_odomter(self,mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage else:
print("You can't roll back an odometer!") def increment_odometer(self,miles):
self.odometer_reading += miles class ElectricCar(Car):
"""电动汽车的独特""" def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year) # 给子类定义属性和方法
self.battery_size = 70 #给子类定义属性和方法
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-KWh battery.") my_tesla = ElectricCar('tesla','model X',2018)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()

执行结果:

 2018 Tesla Model X
This car has a 70-KWh battery.

1.2、重写父类的方法

  1. 如果父类中存在的一个方法完全不适用于子类,那么可以直接在子类中对父类的方法进行重写。
  2. 要求子类中重写的方法要与父类的同名,这样代码就不会执行父类方法,而只关注子类的方法
 class Car():
--snip-- def fill_gas_tank():
"""油箱"""
print("This car need a gas tank.") class ElectricCar(Car):
--snip--
#重写父类的方法
def fill_gas_tank():
"""电动汽车没有油箱"""
print("This car doesn't need a gas tank.")

1.3、将实例用作属性

  1. 定义一个新类,并且没有任何继承
  2. 在子类中,添加一个属性,指向新建的父类;这里是self.battery = Battery()
 class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 def get_descriptive_name(self):
long_name = str(self.year) + " " + self.make + " " + self.model
return long_name.title() def read_odometer(self):
print("This car has" + str(self.odometer_reading) + "mile on it.") def update_odomter(self,mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage else:
print("You can't roll back an odometer!") def increment_odometer(self,miles):
self.odometer_reading += miles # 将实例用作属性
class Battery():
def __init__(self, battery_size=70):
"""初始化电瓶的属性"""
self.battery_size = battery_size def describe_battery(self):
"""打印一条描述电瓶容量的信息"""
print("This car has a" + str(self.battery_size) + "-KWh battery.") class ElectricCar(Car):
"""电动汽车的独特""" def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year) # 给子类定义属性和方法
# self.battery_size = 70 #新属性
#初始化父类的属性,再初始化电动车特有的属性
self.battery = Battery() # #给子类定义属性和方法
# def describe_battery(self):
# """打印一条描述电瓶容量的消息"""
# print("This car has a " + str(self.battery_size) + "-KWh battery.") #重写父类的方法
def fill_gas_tank():
"""电动汽车没有油箱"""
print("This car doesn't need a gas tank.") my_tesla = ElectricCar('tesla','model X',2018)
print(my_tesla.get_descriptive_name())
# my_tesla.describe_battery()
my_tesla.battery.describe_battery()

执行结果:

 2018 Tesla Model X
This car has a70-KWh battery.
继续将实例用作属性
class Car():
--snip--# 将实例用作属性
class Battery():
  --snip--

  #实例2
#打印一条消息,指出电瓶的续航里程
def get_range(self):
if self.battery_size == 70:
range = 240 elif self.battery_size == 85:
range = 70 msg = "This car can go approximately" + str(range)
msg += "miles on a full charge."
print(msg) class ElectricCar(Car):
--snip-- tr my_tesla = ElectricCar('tesla','model X',2018)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

执行结果:

 2018 Tesla Model X
This car has a70-KWh battery.
This car can go approximately240miles on a full charge.

python 类 - 继承的更多相关文章

  1. python 类继承演示范例的代码

    把做工程过程重要的代码片段备份一次,下面的资料是关于python 类继承演示范例的代码. # a simple example of a class inheritance # tested with ...

  2. python类继承

    面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制.继承完全可以理解成类之间的 类型和子类型 关系. 假设你想要写一个程序来记录学校之中的教师和学生情况.他们有一些 ...

  3. Python 类继承,__bases__, __mro__, super

    Python是面向对象的编程语言,也支持类继承. >>> class Base: ... pass ... >>> class Derived(Base): ... ...

  4. Python类继承(转发)

    目录 一.概述 二.类的继承 2.1 继承的定义 2.2 构造函数的继承 2.3 子类对父类方法的重写 三.类继承的事例 回到顶部 一.概述 面向对象编程 (OOP) 语言的一个主要功能就是“继承”. ...

  5. 第7.7节 案例详解:Python类继承机制

    本节实现一个类继承的小程序,下面一边结合代码一边介绍相关继承的知识.例子以车.汽车为例,车为父类.汽车为子类. 一.    定义父类Vehicle class Vehicle():    def __ ...

  6. python类继承的重写和super

    给已经存在的类添加新的行为,继承是非常好的实现方式.但是如果要改变行为呢?比如在Python继承扩展内置类,我们的contact类只允许一个名字和一个邮箱,但是如果要对某些人增加电话号码呢?这里可以通 ...

  7. python 类继承与子类实例初始化

    From: https://blog.csdn.net/cs0301lm/article/details/6002504?utm_source=blogxgwz4 [ 先贴参考书籍原文(中文英文对照) ...

  8. python 类继承

    #!/usr/bin/python # Filename: inherit.py class SchoolMember: '''Represents any school member.''' def ...

  9. Python类继承,方法重写及私有方法

    # -*- coding: utf-8 -*- """ Created on Mon Nov 12 15:05:20 2018 @author: zhen "& ...

随机推荐

  1. 小白学 Python 爬虫(33):爬虫框架 Scrapy 入门基础(一)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  2. Vuex入门实践(上)

    一.前言 vuex被称为是专为vue应用程序开发的的状态管理模式.它的作用使用一句话描述就是:让组件之间可以共享数据 话不多少,先抛开概念,我们写一个简单的示例感受一波. 二.项目开发环境 项目开发环 ...

  3. Lincode刷题No.8

    8.Rotate String lintcode 题解1: class Solution { public: /** * @param str: An array of char * @param o ...

  4. AcWing 244. 谜一样的牛|树状数组

    传送门 题目描述 有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高. 现在这n头奶牛站成一列,已知第i头牛前面有Ai头牛比它低,求每头奶牛的身高. 输入格式 第1行:输入整 ...

  5. 原生js中call、apply、bind的区别和相同点

    结论: 相同点: 1.都是js原生方法,改变函数中的this指向 2.都可以传递参数,第一个参数为 把this指向到哪里去,即目标元素 不同点: 1.call和apply都是主动触发,绑定后自动执行, ...

  6. “云”端的语雀:用 JavaScript 全栈打造商业级应用

    作者|  不四(死马)蚂蚁金服 语雀产品技术负责人 语雀是什么? 语雀是一个专业的云端知识库,面向个人和团队,提供与众不同的知识管理,打造轻松流畅的工作协同,它提供各种格式的在线文档(富文本.表格.设 ...

  7. C#登出系统并清除Cookie

    1.前端页面代码: 前端页面代码主要显示退出系统或者网站的可视化按钮代码,代码如下:(请忽略项目关键字:CPU) <ul class="nav navbar-nav navbar-ri ...

  8. Spring Boot2 系列教程 (十四) | 统一异常处理

    如题,今天介绍 SpringBoot 是如何统一处理全局异常的.SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ...

  9. 1z0-062 题库解析6

    You want execution of large database operations to suspend, and then resume, in the event of space a ...

  10. background-position和position

    1.background-position:表示背景定位的属性.描述属性值时,有两种方式:一是像素描述:而是单位描述. (1)像素描述: 格式如下: background-position:向右偏移量 ...