前言

之前几课里边我们接触到了很多内置数据类型,字符串、列表、字典等等。

难道一个编程语言里只能使用定义好的数据类型吗?如果他们并不非常适合现有数据的表达呢?我们可以创造一个新的数据类型来使用吗?

当然可以,面向对象思想中的类(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)创造新的数据类型!相关推荐

  1. python中类的嵌套_python中的嵌套类 | 学步园

    在.NET和JAVA语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的,今天在python也看到了很不错支持一下.动态语言中很好的嵌套类的实现,应该说嵌套类解决设计问题同时简化了程序,值得学 ...

  2. python中类的嵌套_python 中的嵌套类

    嵌套类的简单介绍 在看 idarling 源码中,经常出现如下代码: import sys import ida_funcs import ida_kernwin from PyQt5.QtCore ...

  3. python中类怎么理解_Python中的列表理解

    python中类怎么理解 In order to create a list, a most obvious and remembered solution is to use a for-loop. ...

  4. python面对对象计算矩形_python第九课 面向对象

    上周习题: 1.shape基类,要求所有子类都必须提供面积的计算,子类有三角形,矩形,圆,圆类的数据可序列化 2.用面向对象实现LinkedList链表,单向链表实现append,iternodes ...

  5. python中类的嵌套_python类的嵌套

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在.net和java语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的 ...

  6. python中类的定义_python 类中定义类

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...

  7. python中类的用法_Python中的类和方法使用举例

    成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...

  8. python中类和对象_Python里的类和对象简介

    ---恢复内容开始--- Python里的类 对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模具 ...

  9. python实训内容_Python实验课:Python元组数据及其运算

    一.实验目的及内容 (1)元组的声明和初始化 (2)元组元素的访问 (3)元组的更新与合并 (4)元组的遍历 二.实验过程 1.元组的声明和初始化 (1)启动IDLE开发环境,并新建一个Python模 ...

最新文章

  1. Andriod anim 补间(Tween)动画与Interpolator以及setCustomAnimations方法
  2. pl/sql里的exists和in的差别
  3. 6月24日AppCan移动开发者大会礼品清单遭泄露
  4. mysql 数据库中数据去重,oracle数据库中如何达到像mysql数据库中group by 那种去重的效果..求大神解答...
  5. 匿名内部类 handler
  6. 两岸三地在线编程学习网站大全
  7. github上传时出现error: src refspec master does not match any解决办法
  8. hnu暑期实训 数码管儿
  9. 电子政务发展现状的调研分析(转)
  10. 田径运动会管理系统之Java
  11. B2B供应链电商系统平台解决方案,如何实现全网整合
  12. 用iframe的方式 解决 window.open() 不能打开多个窗口的问题
  13. 第六章、Hash函数
  14. 关于用户注册登录的问题
  15. 福建云服务器虚拟,云服务器
  16. DCL(数据控制语言)和TCL(事务控制语言)
  17. EIGRP协议(NA、NP知识点)
  18. 百度地图定位API,精度提高
  19. 百度地图api之创建自定义控件
  20. Dagger2的使用总结

热门文章

  1. 杭电1422 重温世界杯
  2. C++——模板特化和偏特化
  3. 使用java如何访问报表服务器_Java访问远程http服务器上数据的简便方法
  4. java服务端开发安全_后端开发:APP与后端交互的安全性
  5. python列表内置函数_Python-列表总结(操作符、方法、内置函数、相关模块)
  6. python init main_python 模块中的 __init__.py __main__.py
  7. java awt编程_java awt编程
  8. linux系统上安装toma,Linux-tar - osc_btnnkvs0的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 切削为什么没有切屑_数控机床如何选择最佳切削刀具?都有哪些小技巧?
  10. Filecoin逻辑梳理及源代码导读