pycharm实现在子类中添加一个父类没有的属性


Posted in Python onMarch 12, 2020

我就废话不多说了,还是直接看代码吧!

class Car():
  """一次模拟汽车的简单尝试"""
  def __init__(self, make, model, year):
    """初始化描述汽车的属性"""
    self.make = make
    self.model = model
    self.year = year
    self.odometer_reading = 0

  def get_description_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) + " miles on it.")

  def update_odometer(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 s', 2016)
print(my_tesla.get_description_name())
my_tesla.describe_battery()

运行结果:

Traceback (most recent call last):
 File "E:/Python编程从入门到精通配套资料/Self-taught Python/electric_car.py", line 50, in <module>
  my_tesla.describe_battery()
 File "E:/Python编程从入门到精通配套资料/Self-taught Python/electric_car.py", line 46, in describe_battery
  print("This car has a " + str(self.battery_size) + "-kwh battery.")
AttributeError: 'ElectricCar' object has no attribute 'battery_size'

补充知识:python中类的继承,子类的方法的添加,子类的方法的覆盖,子类的属性的添加,及继续父类的属性

python如果我们想要继承一个类的方法,并且不改当前类,我们可以新建一个子类,来继续他的方法

1、类的继承,我们先来创建一个Animal的父类,我们再来创建一个dog的子类,dog子类继承父类Animal的方法,但是里面没有执行任何代码,这时我们初始化一下dog子类为dog_1,记得也要传入身高还有体重,不然会报错我们可以发现dog_1继承了Animal里面的属性及方法。直接输出一下及调用一下。

class Animal():
  def __init__(self, weight, high):
    self.weight = weight
    self.high = high
  def shout(self):
    print('wow')
class Dog(Animal):
  pass
dog_1 = Dog(20,40)
print(dog_1.high)
print(dog_1.weight)
dog_1.shout()
#输出内容是
40
20
wow

2、子类的方法的添加,我们同样可以在dog这个子类里添加新的方法,比如我们添加一个run的方法,再初始化一下dog_1,你会发现dog_1也会有run这个方法。

class Dog(Animal):
  def run(self):
    print('running')
dog_1 = Dog(20,40)
dog_1.run()
#输出结果是
running

3、子类的方法的覆盖,我们再添加一个子类Cat,同样继承Animal,但是你发现Cat不是wow这样叫的,所以我们要重新定义一下shout函数,把父类Animal里的函数覆盖掉。这时我们初始化cat_1调用Cat子类,记得要传入体重和身高,不然会报错,然后调用shout方法,你会发现输出的内容是miao,因为子类里的函数把父类里的函数覆盖掉了。

class Cat(Animal):
  def shout(self):
    print('miao')
cat_1 = Cat(20, 40)
cat_1.shout()
#输出结果是
miao

4、子类的属性的添加,及继续父类的属性,如果这时我们要给Cat加一个属性color,同样用__init__来定义属性,但是我们要用super()来继承父类里的weight和high,color 属性的性,同样用self.color赋值,这样我们用cat_2初始化Cat类的时候就要传入三个参数,我们输出一个cat_2.color,可以看到是正常调用的。

class Cat(Animal):
  def __init__(self, weight, high, color):
    super().__init__(weight, high)
    self.color = color
  def shout(self):
    print('miao')
cat_2 = Cat(20, 40, 'yellow')
print(cat_2.color)
#输出结果是
yellow

类的继承就讲到这里,大家有问题欢迎私聊我

以上这篇pycharm实现在子类中添加一个父类没有的属性就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python创建和删除目录的方法
Apr 29 Python
python中import reload __import__的区别详解
Oct 16 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Tornado高并发处理方法实例代码
Jan 15 Python
Python zip()函数用法实例分析
Mar 17 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
python绘制简单彩虹图
Nov 19 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
python科学计算之scipy——optimize用法
Nov 25 Python
python import 上级目录的导入
Nov 03 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 #Python
Python获取对象属性的几种方式小结
Mar 12 #Python
深入浅析Python 命令行模块 Click
Mar 11 #Python
python字典和json.dumps()的遇到的坑分析
Mar 11 #Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 #Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 #Python
django admin 添加自定义链接方式
Mar 11 #Python
You might like
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
php数组去重实例及分析
2013/11/26 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python提取网页中超链接的方法
2016/09/18 Python
python清空命令行方式
2020/01/13 Python
Python 字典中的所有方法及用法
2020/06/10 Python
移动通信专业自荐信范文
2013/11/12 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
分居协议书范本
2014/11/03 职场文书
学雷锋主题班会教案
2015/08/13 职场文书