python中类的使用_Python第九课-使用 类(class)创造新的数据类型!
前言
之前几课里边我们接触到了很多内置数据类型,字符串、列表、字典等等。
难道一个编程语言里只能使用定义好的数据类型吗?如果他们并不非常适合现有数据的表达呢?我们可以创造一个新的数据类型来使用吗?
当然可以,面向对象思想中的类(class)概念可以帮助我们完成这个任务!
上节课中get_data函数取出的数据类型为字典(dictionary),james2.txt内数据的表达方式为:
james_data = {'dob': '2002-3-14', 'name': 'James Lee', 'times': ['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22', '2.01', '2.01', '2.16']}
这样已经够好了,可是我们可以在数据的表达方式上做的更好!
一、关于类(class)的基础练习
目标:创建一个定制的类Athlete
介绍:用Athlete实现与字典基本相似的结构和方法,如包含了name,dob,times属性,对times属性进行添加、删除等操作的方法。
1、首先定义数据格式化函数sanitize 照搬上课即可
2、定义Athlete类:
class Athlete:
'''此类包含三个属性name,dob,times
两个方法add_time(向times属性中增加一个元素);add_times方法(向times属性中增加一组元素)'''
def __init__(self, a_name, a_dob=None, a_times=[]): #python中没有构造函数,此函数意为初始化函数
self.name = a_name
self.dob = a_dob
self.times = a_times
def add_time(self, value): #对类添加一些方法,类中的方法用函数形式定义
self.times.append(value)
def add_times(self, values): #self参数是类中方法的必须参数,必须放在第一个参数位置。可以把self参数理解为 本类的一个实例(类本身),参照java中的this理解
self.times.extend(values)
3、修改上课中获取数据的get_data方法
def get_data(filename):
'''此函数作用是将文件行内的字符串数据以','分片,并用sanitize函数格式化后存储为Athlete类型返回
参数filename是待处理的文本文件'''
try:
with open(filename) as f:
data = f.readline()
ldata = data.strip().split(',')
a_name = ldata.pop(0)
a_dob = ldata.pop(0)
clean_times = [sanitize(each_time) for each_time in ldata]
return(Athlete(a_name, a_dob, clean_times)) #这里将Athlete实例化,返回Athlete的一个实例
except IOError as ioerr:
print('file missing: ' + str(ioerr))
4、调用get_data方法看结果
james_data = get_data('james2.txt') #james_data——Athlete的一个实例
print(james_data.name, james_data.dob, james_data.times) #james_data.name——调用类属性
james_data.add_times(['4.52', '3.71']) #调用类方法
print(james_data.times)
结果:
James Lee 2002-3-14 ['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22', '2.01', '2.01', '2.16']
['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22', '2.01', '2.01', '2.16', '4.52', '3.71']
二、类的深入探索:继承
我们将把Athlete类改造成为一个继承自list的类(list本身也是一个类)
这样Athlete就可以使用列表的所有特性!减少开发量,减少脑细胞死亡量!
至于待处理数据中的 名字、生日 怎么办呢?别忘了Athlete是个定制的类,我们可以给它两个属性来分别表达 名字、生日
目标:修改现有Athlete类
介绍:
让Athlete本身是一个列表,用来表达运动员的成绩,这样就可以利用列表的现有方法操作Athlete,省去了定义方法的麻烦。
另外给Athlete类增加两个属性,name属性和dob属性,用来表达运动员的名字和生日。
1、修改Athlete类:
class Athlete(list):
'''此类是一个列表类,继承与内置类列表
此类有两个属性name,dob'''
def __init__(self, a_name, a_dob=None, a_times=[]):
self.name = a_name
self.dob = a_dob
self.extend(a_times)
2、sanitize和get_data函数不更改,执行下看看结果:
james_data = get_data('james2.txt')
print(james_data.name, james_data.dob, james_data) #james_data是Athlete的一个实例,本身就是一个列表
james_data.append('4.32') #Athlete继承自list,所以list得方法Athlete都可以用
print(james_data)
结果:
James Lee 2002-3-14 ['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22', '2.01', '2.01', '2.16']
['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22', '2.01', '2.01', '2.16', '4.32']
类的知识点还有好多,之后再叙!
0
顶
0
踩
分享到:
2012-09-19 16:51
浏览 2648
评论
python中类的使用_Python第九课-使用 类(class)创造新的数据类型!相关推荐
- python中类的嵌套_python中的嵌套类 | 学步园
在.NET和JAVA语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的,今天在python也看到了很不错支持一下.动态语言中很好的嵌套类的实现,应该说嵌套类解决设计问题同时简化了程序,值得学 ...
- python中类的嵌套_python 中的嵌套类
嵌套类的简单介绍 在看 idarling 源码中,经常出现如下代码: import sys import ida_funcs import ida_kernwin from PyQt5.QtCore ...
- python中类怎么理解_Python中的列表理解
python中类怎么理解 In order to create a list, a most obvious and remembered solution is to use a for-loop. ...
- python面对对象计算矩形_python第九课 面向对象
上周习题: 1.shape基类,要求所有子类都必须提供面积的计算,子类有三角形,矩形,圆,圆类的数据可序列化 2.用面向对象实现LinkedList链表,单向链表实现append,iternodes ...
- python中类的嵌套_python类的嵌套
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在.net和java语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的 ...
- python中类的定义_python 类中定义类
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...
- python中类的用法_Python中的类和方法使用举例
成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...
- python中类和对象_Python里的类和对象简介
---恢复内容开始--- Python里的类 对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模具 ...
- python实训内容_Python实验课:Python元组数据及其运算
一.实验目的及内容 (1)元组的声明和初始化 (2)元组元素的访问 (3)元组的更新与合并 (4)元组的遍历 二.实验过程 1.元组的声明和初始化 (1)启动IDLE开发环境,并新建一个Python模 ...
最新文章
- Andriod anim 补间(Tween)动画与Interpolator以及setCustomAnimations方法
- pl/sql里的exists和in的差别
- 6月24日AppCan移动开发者大会礼品清单遭泄露
- mysql 数据库中数据去重,oracle数据库中如何达到像mysql数据库中group by 那种去重的效果..求大神解答...
- 匿名内部类 handler
- 两岸三地在线编程学习网站大全
- github上传时出现error: src refspec master does not match any解决办法
- hnu暑期实训 数码管儿
- 电子政务发展现状的调研分析(转)
- 田径运动会管理系统之Java
- B2B供应链电商系统平台解决方案,如何实现全网整合
- 用iframe的方式 解决 window.open() 不能打开多个窗口的问题
- 第六章、Hash函数
- 关于用户注册登录的问题
- 福建云服务器虚拟,云服务器
- DCL(数据控制语言)和TCL(事务控制语言)
- EIGRP协议(NA、NP知识点)
- 百度地图定位API,精度提高
- 百度地图api之创建自定义控件
- Dagger2的使用总结
热门文章
- 杭电1422 重温世界杯
- C++——模板特化和偏特化
- 使用java如何访问报表服务器_Java访问远程http服务器上数据的简便方法
- java服务端开发安全_后端开发:APP与后端交互的安全性
- python列表内置函数_Python-列表总结(操作符、方法、内置函数、相关模块)
- python init main_python 模块中的 __init__.py __main__.py
- java awt编程_java awt编程
- linux系统上安装toma,Linux-tar - osc_btnnkvs0的个人空间 - OSCHINA - 中文开源技术交流社区...
- 切削为什么没有切屑_数控机床如何选择最佳切削刀具?都有哪些小技巧?
- Filecoin逻辑梳理及源代码导读