前言
之前几课里边我们接触到了很多内置数据类型,字符串、列表、字典等等。
难道一个编程语言里只能使用定义好的数据类型吗?如果他们并不非常适合现有数据的表达呢?我们可以创造一个新的数据类型来使用吗?
当然可以,面向对象思想中的类(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']
类的知识点还有好多,之后再叙!
分享到:
相关推荐
1. 变量与数据类型:Python支持整型(int)、浮点型(float)、字符串(str)等基本数据类型。变量无需预先声明,直接赋值即可创建。 2. 运算符:包括算术运算符(+、-、*、/、%等)、比较运算符(==、!=、>、<等)...
3. Python的基本数据类型 - 整型(int):如123、-456,支持大整数运算。 - 浮点型(float):如3.14、-9.8,遵循IEEE 754标准。 - 复数型(complex):如(3+4j)、(-2-1j),用于数学计算。 - 字符串(str):用...
- **继承(Inheritance)**:继承是面向对象编程的一个核心特性,允许创建一个新类来继承现有类的属性和方法。例如,定义一个子类继承自父类:`class ChildClass(ParentClass):`。 - **多重继承**:Python支持多重继承...
Python支持面向对象编程(OOP),包括类(class)的定义、对象的创建、继承(inheritance)、多态(polymorphism)和封装(encapsulation)等概念。 九、文件操作 Python提供了一系列内置的文件操作函数,如open()...
Python 支持多种内置的数据类型,包括但不限于: - **整数** (`int`):表示整数。 - **布尔类型** (`bool`):表示 `True` 或 `False`。 - **浮点数** (`float`):表示小数。 - **复数** (`complex`):如 `1 + 2j`。...
1. 类与对象:Python是面向对象的语言,通过`class`定义类,实例化对象。 2. 继承:子类继承父类的属性和方法,实现代码复用。 3. 多态:不同对象对同一消息可以有不同的响应,体现多态性。 **六、异常处理** ...
1. **Python基础知识**:包括变量、数据类型(如整型、浮点型、字符串、布尔型)、运算符、控制流(条件语句、循环)、函数定义和调用、模块导入等。 2. **数据结构**:列表(List)、元组(Tuple)、集合(Set)和...
2. **数据类型**:Python 支持多种数据类型,如整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还包含复合类型,如列表(list)、元组(tuple)、字典(dict)和集合(set)。 3. **控制流**...
Python支持多种数据类型,包括整型(int)、浮点型(float)、字符串(str)、布尔型(bool)、列表(list)、元组(tuple)、集合(set)和字典(dict)等。这些类型提供了丰富的操作方法,便于处理各种数据结构。...
- **发展背景:** 在Perl和Python流行的时代背景下,松本行弘希望创造一种既能像Perl那样高效处理文本,又能像Smalltalk一样优雅地实现面向对象编程的语言。 **1.2 Ruby名字的由来** - Ruby这个名字来源于松本行...
5. **面向对象编程**:Python支持类(class)和对象的概念,包括类的定义、对象的创建、继承、封装和多态。 6. **标准库**:Python有一个丰富的标准库,提供了各种功能,如文件操作、网络通信、数据解析等。 7. **...
- **定义异常类**:可以通过继承标准异常类来定义新的异常类型。 - **catch和throw**:用于显式抛出和捕获异常。 #### 十、多任务处理 ##### 10.1 多线程处理 - **线程创建**:使用`Thread.new`创建新线程。 - **...
Perl是当时非常流行的脚本语言之一,而Ruby正是Matz想要创造的一种“更好的Perl”,因此Ruby这个名字既代表了他对Perl的敬意,也体现了他对新语言的美好愿景。 **1.3 Ruby的特点** - **简洁性**:Ruby的设计目标之...
2.4 数据类型 PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。 数值 数值类型可以是整数或是...
1. **变量与数据类型**:Python支持多种数据类型,如整数(int)、浮点数(float)、字符串(str)和布尔值(bool)。变量可以动态赋值,无需提前声明类型。 2. **控制流**:包括条件语句(if-elif-else)和循环...
1. 变量与数据类型:Python支持整型(int)、浮点型(float)、字符串(str)和布尔型(bool)等基本数据类型。例如: ```python a = 10 # 整型 b = 3.14 # 浮点型 c = "Hello" # 字符串 d = True # 布尔型 ``` 2. ...