(一)  简单说明

字典是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)

Python笔记(七):字典、类、属性、对象实例、继承的更多相关文章

  1. 『无为则无心』Python面向对象 — 57、类属性和实例属性

    目录 1.类属性 (1)类属性的访问 (2)修改类属性 2.类属性和实例属性区别 1.类属性 (1)类属性的访问 类属性就是 类对象 所拥有的属性,它被 该类的所有实例对象 所共有. 类属性可以使用 ...

  2. php笔记(七)PHP类于对象之多态

    <?php interface ICanEat{ public function eat($food);} class Human implements ICaneat{ public func ...

  3. python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性

    python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...

  4. python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法

    类对象.类属性与实例对象.实例属性的区别 在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性.类属性在内存中只有一份,在__init__外部定义. 通过类创建的对象称为实 ...

  5. Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...

  6. Python基础:17类和实例之一(类属性和实例属性)

    1:类通常在一个模块的顶层进行定义.对于Python来说,声明与定义类是同时进行的. 2:类属性仅与其类相绑定,类数据属性仅当需要有更加“静态”数据类型时才变得有用,这种属性是静态变量.它们表示这些数 ...

  7. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  8. python 类属性和实例属性

    class AAA(): aaa = 10 # 情形1 obj1 = AAA() obj2 = AAA() print obj1.aaa, obj2.aaa, AAA.aaa # 情形2 obj1.a ...

  9. Python中的类属性、实例属性与类方法、静态方法

    1.什么是类对象,实例对象 类对象:类名 实例对象:类创建的对象 2.类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++.Java中类的静态成员变量有点 ...

  10. 关于Python类属性与实例属性的讨论

    标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...

随机推荐

  1. 5、ABPZero系列教程之拼多多卖家工具 修改User表结构

    毕竟这个框架是外国人开发的,对于我们国人来说还是有些地方并不合适,就好比如注册时需要填写名字.姓氏一样,今天要说的就是如何去掉这2个字段. 先看如下修改完成的效果图 User表结构修改 修改User类 ...

  2. Java集合系列[1]----ArrayList源码分析

    本篇分析ArrayList的源码,在分析之前先跟大家谈一谈数组.数组可能是我们最早接触到的数据结构之一,它是在内存中划分出一块连续的地址空间用来进行元素的存储,由于它直接操作内存,所以数组的性能要比集 ...

  3. file中private_data

    这个是Linux下连接VFS文件系统框架和不同文件/文件系统底层实现之间的一个核心数据结构,虽然它只是一个指针,但是一个指针可以解决所有问题,有了它,妈妈再也不用担心我的学习.我们回想一下用户态线程的 ...

  4. Zabbix实战-简易教程--正则(Regxp)

    一.正则表达式(Regx) 1.概述 正则表达式概念就不解释了.请参考:https://en.wikipedia.org/wiki/Regular_expression#POSIX_extended ...

  5. 视觉slam十四讲习题ch3-6

    题目回顾: 一般解线性方程Ax=b有哪几种做法?你能在Eigen中实现吗? 解: 线性方程组Ax = b的解法 : 1.直接法:(1,2,3,4,5) 2.迭代法:如Jacobi迭代法(6) 其中只有 ...

  6. AttributeError: 'int' object has no attribute 'log'

    我们有时候在对组数进行操作时候,偶尔会出现这个问题. 比如: #coding:utf- import pandas as pd import numpy as np if __name__ == '_ ...

  7. 成功破解邻居的Wifi密码

    // 这是一篇导入进来的旧博客,可能有时效性问题. 默认配置的路由器,8位以下密码,黑客几分钟就可以破解.以前用自己的路由器做过实验,这次真正实践成功.环境:Kali Linux工具集:aircrac ...

  8. Java与算法之(6) - 八皇后问题

    在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. (文字和图片来自百度百科) 如果动手来摆放皇后,可以用这样一种思路:在最左侧 ...

  9. 天气类App原型制作分享-ColorfulClouds

    ColorfulClouds是一款界面精美的天气预报App,它可以准确预报降雨量.污染程度等.这款App最美的是它的首页天气插画,扁平精美,同时配上了适当的动效,把普通的天气变得漂亮有趣,十分吸引眼球 ...

  10. AtCoder Regular Contest 071

    C - 怪文書 / Dubious Document 题意:定义一种无序的子序列:在原串中随意地取字符并随意打乱顺序.求多个字符串的最长公共无序子序列. #include<cstdio> ...