Python笔记(七):字典、类、属性、对象实例、继承

(一)  简单说明

   字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据)。例如:下面这个就是一个字典

{'姓名': '张三', '出生日期': '2899-08-12', '成绩': ['3.21', '3.10', '3.01']}

创建字典、添加数据、访问字典数据的方式如下:

d = {}  #直接用{}创建字典 f = dict() #通过工厂函数dict()创建字典 #通过下面的方式添加数据 d['姓名'] = '张三' d['出生日期'] = '2899-08-12' d['成绩'] = ['3.21', '3.10', '3.01', '2.45', '2.34', '2.22', '2.01'] print(d) #通过键访问字典的数据 print(d['姓名']) print(d['出生日期']) print(d['成绩']) print(d['成绩'][2])

输出如下所示:

(二)  将列表转换为字典

(1)   创建一个文件

james2.txt 第一项是姓名,第二项是出生日期,后面的是成绩

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)   要求

在屏幕上输出下面格式的字典

{'姓名': 'James Lee', '出生日期': '2002-3-14', '成绩': ['3.21', '3.10', '3.01']}

(3)   主程序代码

from FirstPython import the_dict as td



the_james2 = td.chdict('F:\Python\Python文件\james2.txt')

print(the_james2)

(4)   the_dict模块代码

def sanitize(time_str):

    #传入字符串,将'-'和':'修改为'.'并返回,否则直接返回

    if '-' in time_str:

        (x,y) = time_str.split('-',1)

        return(x+"."+y)

    elif ':' in time_str:

        (x,y) = time_str.split(':',1)

        return (x + "." + y)

    else:

        return(time_str)



def chdict(the_file):

    #传入文件,返回一个字典

    d = dict()

    with open(the_file) as james_file:

        the_list = james_file.readline().strip().split(',')

        #分割数据,返回一个列表

    d['姓名'] = the_list.pop(0)

    #pop()删除指定位置的数据项并返回

    d['出生日期'] = the_list.pop(0)

    d['成绩'] = sorted(set([sanitize(t) for t in the_list ]),reverse=True)[0:3]

    #set()删除重复数据并返回一个无序的集合,sorted()排序

    return d

(三)  类、属性、对象实例

 简单的说,类和属性都是一个抽象的概念,对象实例是一个具体的“存在”。例如:

类:人

属性:姓名、身高、体重

对象实例:张三、李四

人 指一类东西,身高、姓名、体重 是这类东西都有的属性,张三、李四指的是具体的某一个人。

(四)  创建类、创建对象实例

class People:

    def __init__(self):

说明:上面这部分是必须有的,其中 People是类名,自己自定义,__init__(self)方法控制如何初始化对象,self也是必须有的(这是一个目标标识符,标识当前对象具体是什么)

举个例子:

(1)   创建一个类

class People: def __init__(self,name,date=None,achievement=[]):

# date,achievement有缺省(默认)值         self.name = name         self.date = date         self.achievement = achievement

(2)   创建对象实例

zs = People('张三')

#创建 name为张三的对象实例

说明:使用zs = People('张三')时,会自动调用people类的 __init__()方法,其中self = zs,name=’张三’,然后创建一个 name = ‘张三’date=None,achievement=[] 的对象实例zs

(3)   类中可以定义很多方法,不过每个方法的第一个参数都必须是self(没有设置这个参数,那么第一参数就会被当做self参数处理)。

例如:

def chdict(self,the_file):

    with open(the_file) as new_file:

        the_list = new_file.readline().strip().split(',')

    return People(the_list.pop(0),the_list.pop(0),the_list)

def top3(self):

    return(sorted(set(self.sanitize(t) for t in self.achievement),reverse=True)[0:3])

(五)  继承

  可以从零开始创建一个新类,也可以继承已经创建好的类,在这个基础上新增属性、方法。

继承的概念:继承父类的所有方法及属性,子类可以新增方法、属性,也可以重写父类的方法。简单的说,比如你继承了你父亲的所有能力及天赋(包括身高、体重等),然后你可以通过学习去掌握更多的能力,继承自你父亲的能力你也可以根据自己的需要去改变(比如:杰出的沟通能力,你父亲可能用在商业谈判上,你可能想用在泡妞上面)。比喻可能不太形象,请多多包涵。

(1)   通过继承的方式创建一个类

class PeopleList(list): def __init__(self):         list.__init__([])

PeopleList(list)新类将派生list类,list.__init__([]) 初始化所派生的类

(2)   举个例子,下面这个类就能继承list的所有方法

class PeopleList(list):

    def __init__(self,name,date=None,achievement=[]):

        list.__init__([])

        self.name = name

        self.date = date

        self.extend(achievement)
可以在编辑器中进行测试:
james = PeopleList('james')

james.append(5)

print(james)

james.extend([1,2,3])

print(james)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈树义

如何快速学好Shell脚本?

1073
来自专栏Brian

Python 深浅拷贝

Python浅拷贝和深度拷贝 今天面试了一个计算机专业研究生且大学出身也很好,但是面试的结果来看并没有达到我的预期。很多基础计算机的知识貌似都不是很懂,更别说...

4128
来自专栏陈纪庚

javascript变量提升详解

对于大多数js开发者来说,变量提升可以说是一个非常常见的问题,但是可能很多人对其不是特别的了解。所以在此,我想来讲一讲。

1152
来自专栏一名合格java开发的自我修养

java或判断优化小技巧

写业务代码的时候,我们经常要做条件判断,有的时候条件判断的或判断长达20多个。reg.equals("1") || reg.equals("2") || reg...

671
来自专栏MyBlog

Effective.Java 读书笔记(8)关于equals方法

重写equals看上去十分简单对吧,但是我觉得很多时候重写equals可能会招致一些问题,这些问题有时可能会特别严重,当然了不重写不就完事了吗?但是这只适用于那...

924
来自专栏CaiRui

Python之‘数据结构’

简介 数据结构基本上就是--它们是可以处理一些数据的结构。或者说,它们是用来存储一组相关数据的。在Python里面有三种内建的数据结构--列表、元组和字典。 一...

2078
来自专栏贺贺的前端工程师之路

《JavaScript语言精粹》学习笔记

在JavaScript中,/ *可能出现在正则表达式字面量里,所以块注释对于被注释的代码块来说是<u>不安全的</u>。

782
来自专栏大数据和云计算技术

由快速排序到分治思想

算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第一篇《由快速排序到分治思想》,非常赞!希望对大家有帮助,大家会喜欢! 快速排序是一种基于分治思想...

3596
来自专栏程序员互动联盟

【面试宝典】写一个函数将两个数交换

没有参加过面试的同学可能会很忐忑,面试都会出些什么题呢?其实一般情况下,大部分的面试题都是比较基础的。关于如何交换两个数字,应该是非常简单的问题了。看下面几个函...

3548
来自专栏coding for love

JS入门难点解析9-闭包的深入解析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

702

扫码关注云+社区

领取腾讯云代金券