Python3 item系列
一、前言
#在python中一切皆对象
'''
创建了一个dict实例-->dic就是dict的实例对象
我们通过dic['k1']可以得到k1所对应的值
那么我们自定义一个类,可不可以使用对象[变量名]的方式得到我们想要得到的值呢?
'''
dic = dict({'k1':'v1','k2':'v2'}) print(dic['k1'])
我们创建一个字典对象并赋初始值,我们可以通过字典对象[key]得到其dic[key]所对应的value。
那么我们自定义一个类,能否通过对象[变量名]得到我们想要的值呢?
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age zhangsan = Person('zhangsan',30)
print(zhangsan['name']) #TypeError Person object is not subsctiptable
编译器报错了,Python内部提供了支持这种方式访问我们的对象属性的方式,是item系列
二、__getitem__(self,item)
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age def __getitem__(self, item):
return self.__dict__[item] zhangsan = Person('zhangsan',30)
print(zhangsan['name'])
obj[变量名] 实际上调用了内部的__getitem__(self,item)方法,我们可以通过实现这个方法,来实现想要的效果。
self.__dict__返回的是字典类型的 对象所有的属性
我们通过__getitem__获取到了对象的属性值,响应的也会有对对象的属性进行赋值和修改值得操作:__setitem__()
三、__setitem(self,key,value)
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age def __getitem__(self, item):
return self.__dict__[item] def __setitem__(self, key, value):
self.__dict__[key] = value def getinfo(self):
print(self.__dict__) #{'name': 'zhangsan', 'age': 30} zhangsan = Person('zhangsan',30)
print(zhangsan['name'])
zhangsan['age'] = 40 #将年龄修改为40
print(zhangsan['age']) #
此时的年龄被修改为40
除了可以修改属性值的作用,__setitem__()还可以添加对象属性
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age def __getitem__(self, item):
return self.__dict__[item] def __setitem__(self, key, value):
self.__dict__[key] = value def getinfo(self):
print(self.__dict__) #{'name': 'zhangsan', 'age': 30} zhangsan = Person('zhangsan',30)
print(zhangsan['name'])
zhangsan['age'] = 40
print(zhangsan['age'])
zhangsan['school'] = '清华'
print(zhangsan.school) #清华
print(zhangsan['school']) #清华
__setitem__添加对象属性
四、删除对象属性
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age def __getitem__(self, item):
return self.__dict__[item] def __setitem__(self, key, value):
self.__dict__[key] = value def getinfo(self):
print(self.__dict__) #{'name': 'zhangsan', 'age': 30} def __delitem__(self, key):
del self.__dict__[key] zhangsan = Person('zhangsan',30)
print(zhangsan['name'])
zhangsan['age'] = 40
print(zhangsan['age'])
zhangsan['school'] = '清华'
print(zhangsan.school) #清华
print(zhangsan['school']) #清华 del zhangsan['school']
print(zhangsan['school']) #KeyError : 'school'
__delitem__删除对象属性
Python3 item系列的更多相关文章
- [ python ] 反射及item系列
反射 什么是反射? 通过字符串的形式操作对象相关属性.python中的事物都是对象: 关键方法: (1)getattr:获取属性 (2)setattr:设置属性 (3)hashattr:检测是否含有属 ...
- python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用
站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...
- Python3爬虫系列:理论+实验+爬取妹子图实战
Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...
- 面向对象 反射 和item系列和内置函数和__getattr__和__setattr__
反射 反射主要用在网络编程中, python面向对象的反射:通过字符串的形式操作对象相关的属性.python的一切事物都是对象. 反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函 ...
- python 全栈开发,Day24(复习,__str__和__repr__,__format__,__call__,__eq__,__del__,__new__,item系列)
反射: 使用字符串数据类型的变量名来使用变量 wwwh即what,where,why,how 这4点是一种学习方法 反射 :使用字符串数据类型的变量名来使用变量 1.文件中存储的都是字符串 2.网络 ...
- Python3练习题系列(09)——物以类聚,人以群分
目标: 用类管理同类事物 解析: 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)”语言.首先你需要做出“东西”来,然后你“告诉”这些东西去完 ...
- day7--面向对象进阶(内含反射和item系列)
一面向对象的结构和成员 1.1面向对象的结构 class A: company_name = '老男孩教育' # 静态变量(静态字段) __iphone = '1353333xxxx' # 私有静态变 ...
- 1、__del__ 2、item系列 3、__hash__ 4、__eq__
1.__del__ 析构方法 释放一个空间之前之前 垃圾回收机制 2.item系列 和对象使用[ ]访问值有联系 __getitem__ __setitem__ __delit ...
- __del__,item系列 ,hash方法,__eq__,
# 构造方法 申请一个空间# 析构方法 释放一个空间 # 某个对象借用了操作系统的资源,还要通过析构方法归还回去:文件资源 网络资源 # 垃圾回收机制 class A: def __del__(sel ...
随机推荐
- [CF671E] Organizing a Race
题目大意 有\(n\)个加油站排成一行,编号为\(1\sim n\) ,\(i\)与\(i+1\)间有一条长为\(w_i\)千米的道路. 一辆汽车在经过加油站\(i\)时会得到\(g_i\)升汽油 , ...
- AJAX实现无刷新登录
最近学习了如何实现无刷新登录,大体的效果如下(界面比较丑,请自行忽略....): 点击登录按钮时弹出登录窗口,输入正确的用户名密码后点击登录则登录窗口关闭,状态改为当前用户名. 第一步: 首先弹出窗口 ...
- [UVALive 3683] A Scheduling Problem
图片加载可能有点慢,请跳过题面先看题解,谢谢 题目给出了一个信息:答案是有向边最长路 \(k\) 的值或者是 \(k+1\) 的值 那么题目就变成了:求是否有一种给无向边定向的方案,使得在以有向边最长 ...
- 洛谷 P2751 [USACO4.2]工序安排Job Processing 解题报告
P2751 [USACO4.2]工序安排Job Processing 题目描述 一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B.每个操作只有一些机器能够完成. 上图显示了按照下述方式 ...
- linux中man 2与man 3区别
1.Standard commands (标准命令)2.System calls (系统调用)3.Library functions (库函数)4.Special devices (设备说明)5.Fi ...
- nginx 配置 phpmyadmin
server { listen 8092; server_name *.xxx.com; root /home/users/cuijian04/odp302/app/phpmyadmin; set $ ...
- 4 MySQL程序概述(包含mysql配置文件配置原理)-学习笔记
以下参考MySQL5.5官方简体中文参考手册完美版--用于自学复习使用 4.1 程序概述 MySQL AB提供了几种类型的程序:一般放在/安装目录/bin下 1 MYSQL服务器和服务器启动脚本 my ...
- ListView嵌套webView 事件冲突解决
如图,红色部分为WebView,作为ListView头部存在,测试视频(h5)要左右滑动,ListView要上下滑动,保证视频控件和下面评论部分可以显示,但是这个时候就存在WebView横向滑动和Li ...
- 解题:洛谷2093 JZPFAR
题面 初见K-D Tree 其实这样的题(欧几里得距离第$x$近点对)不应该用K-D Tree做,因为会被构造数据卡成$O(n^2)$,随机的另说. 但是并没有找到合适的K-D Tree的题(区域统计 ...
- 最短路 dijkstra 优先队列
1.裸题 hdu2544 http://acm.hdu.edu.cn/showproblem.php?pid=2544 Way1: 好像不对 #include <cstdio> #incl ...