head first python 6 class 扩展

简介: 点击(此处)折叠或打开 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os clas...

点击(此处)折叠或打开

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import os
  4. class athlete:
  5.     def __init__(self, athlete_name, athlete_dob=None, athlete_times=[]):
  6.         self.name = athlete_name
  7.         self.dob = athlete_dob
  8.         self.times= athlete_times
  9.     #运动员最好的3组成绩
  10.     def top3(self):
  11.         return(sorted(set([sanitize(time) for time in self.times]))[0:3])
  12.     #为运动员添加一个成绩
  13.     def add_time(self, time_value):
  14.         self.times.append(time_value)
  15.     #为运动员添加一组成绩,使用列表类型.
  16.     def add_times(self, time_list):
  17.         self.times.extend(time_list)

  18. def openfile(filename):
  19.     try:
  20.         #打开文件
  21.         with open(filename) as athlete_file:
  22.             #读取数据
  23.             data = athlete_file.readline()
  24.             value_list= data.strip().split(',')
  25.             username = value_list.pop(0)
  26.             userdob = value_list.pop(0)
  27.             usertimes= value_list
  28.             #返回实例对象
  29.             athlete_instance=athlete(username,userdob,usertimes)
  30.             return(athlete_instance)
  31.     except IOError as ioerr:
  32.         print('File error %s' % ioerr)
  33.         return(None)

  34. #处理字符,转换成m.s格式
  35. def sanitize(time_string):
  36.     if '-' in time_string:
  37.         splitter = '-'
  38.     elif ':' in time_string:
  39.         splitter = ':'
  40.     else:
  41.         return time_string
  42.     (min, sec) = time_string.split(splitter)
  43.     return (min + '.' + sec)
  44. for name in ["james", "julie", "mikey", "sarah"]:
  45.     name = openfile(name+'.txt')
  46.     print(name.name + '的三次最佳成绩是' + str(name.top3()))


  47. talen = athlete('talen')
  48. talen.add_time('3.25')
  49. talen.add_time('3.45')
  50. talen.add_times(['1.30','2.59'])
  51. print(str(talen.top3()))

t@localhost 6$ python3 kelly_c.py
James Lee的三次最佳成绩是['2.01', '2.16', '2.22']
Julie Jones的三次最佳成绩是['2.11', '2.23', '2.59']
Mikey McManus的三次最佳成绩是['2.22', '2.31', '2.38']
Sarah Sweeney的三次最佳成绩是['2.18', '2.21', '2.22']
['1.30', '2.59', '3.25']

继承list类

点击(此处)折叠或打开

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import os
class athlete:
    def __init__(self, athlete_name, athlete_dob=None, athlete_times=[]):
        self.name = athlete_name
        self.dob = athlete_dob
        self.times= athlete_times
    #运动员最好的3组成绩
    def top3(self):
        return(sorted(set([sanitize(time) for time in self.times]))[0:3])
    #为运动员添加一个成绩
    def add_time(self, time_value):
        self.times.append(time_value)
    #为运动员添加一组成绩,使用列表类型.
    def add_times(self, time_list):
        self.times.extend(time_list)
#使用类继承,继承内置list类
class athletelist(list):
    def __init__(self, a_name, a_dob=None, a_times=[]):
        list.__init__([])
        self.name = a_name
        self.dob = a_dob
        self.extend(a_times)
    def top3(self):
        return(sorted(set([sanitize(t) for t in self]))[0:3])

def openfile(filename):
    try:
        #打开文件
        with open(filename) as athlete_file:
            #读取数据
            data = athlete_file.readline()
            value_list= data.strip().split(',')
            username = value_list.pop(0)
            userdob = value_list.pop(0)
            usertimes= value_list
            #返回实例对象
            athlete_instance=athlete(username,userdob,usertimes)
            return(athlete_instance)
    except IOError as ioerr:
        print('File error %s' % ioerr)
        return(None)

#处理字符,转换成m.s格式
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return time_string
    (min, sec) = time_string.split(splitter)
    return (min + '.' + sec)
for name in ["james", "julie", "mikey", "sarah"]:
    name = openfile(name+'.txt')
    print(name.name + '的三次最佳成绩是' + str(name.top3()))


talen = athlete('talen')
talen.add_time('3.25')
talen.add_time('3.45')
talen.add_times(['1.30','2.59'])
print(str(talen.top3()))
ken = athletelist('ken')
#为运动员添加一个成绩
#由于继承list,不需要自己再定义添加方法,直接使用list的方法
ken.append('4.25')
#为运动员添加一组成绩,使用列表类型.
ken.extend(['4.56','6.20','5.20'])
print(ken.top3())


目录
相关文章
|
24天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
3月前
|
Python
Python--turtle库科赫雪花的扩展
使用Python的turtle库创建科赫雪花,并加入随机阶数、尺寸、位置和颜色的功能,每次运行生成不同图像。
Python--turtle库科赫雪花的扩展
|
2月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
442 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
2月前
|
Go C++ Python
Python Tricks: String Conversion(Every Class Needs a ___repr__)
Python Tricks: String Conversion(Every Class Needs a ___repr__)
21 5
|
2月前
|
Python
Python扩展TimedRotatingFileHandler
【10月更文挑战第7天】 python log执行扩展压缩功能
58 0
|
3月前
|
存储 缓存 API
比较一下 Python、C、C 扩展、Cython 之间的差异
比较一下 Python、C、C 扩展、Cython 之间的差异
40 0
|
4月前
|
算法 关系型数据库 程序员
程序员必备技能)基于Python的鼠标与键盘控制实战扩展与源码
这篇文章是关于如何使用Python的`pyautogui`库来控制鼠标和键盘进行各种操作,包括移动、点击、滚轮控制以及键盘的按键和快捷键输出,并介绍了如何结合图像处理和计算机视觉技术来扩展其应用。
|
4月前
|
测试技术 程序员 开发者
探索代码整洁之道:编写可维护和可扩展的Python程序
【8月更文挑战第3天】在编程的海洋中,我们经常追求的是那些能够高效运行、易于理解和维护的代码。本文将深入探讨如何通过遵循一系列的最佳实践来提升Python代码的整洁度,从而增强其可维护性和可扩展性。我们将通过具体示例,展示如何应用这些原则来编写更优雅、更健壮的Python程序。
40 0
|
6月前
|
数据安全/隐私保护 Python
Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged("INFO", "msg")`,允许动态定制功能。
47 6
|
5月前
|
存储 数据可视化 数据处理
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。