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 ...
随机推荐
- SpringBoot之mongoTemplate的使用
springboot的版本1.5.17.RELEASE. 1.mongo的IP和端口 在resources下的application.properties中加入如下内容 spring.data.mon ...
- 应该更新的Java知识之常用程序库
摘自:http://www.blogbus.com/dreamhead-logs/226738702.html 在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果你 ...
- 【poj2406】 Power Strings
http://poj.org/problem?id=2406 (题目链接) 题意 给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的, 求 R 的最大值. Solution 后 ...
- 20135239 益西拉姆 linux内核分析 进程的切换和系统的一般执行过程
week 8 进程的切换和系统的一般执行过程 [ 20135239 原文请转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Codeforces 914F. Substrings in a String(bitset)
比赛的时候怎么没看这题啊...血亏T T 对每种字符建一个bitset,修改直接改就好了,查询一个区间的时候对查询字符串的每种字符错位and一下,然后用biset的count就可以得到答案了... # ...
- UnityShader 序列帧动画效果
实现原理:主要思想是设置显示uv纹理的大小,并逐帧修改图片的uv坐标. 实现步骤 1.我们首先用_Time.y和速度属性_Speed相乘得到模拟的时间. 2.然后我们用time除以_Horizonta ...
- md5sum/opensll md5
http://m.blog.csdn.net/article/details?id=42041329 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Mess ...
- 【Asp.net入门08】第一个Asp.net应用程序-创建窗体并设置其样式
本节内容: 添加一个aspx窗体并设计窗体内容 为aspx窗体添加样式 前面我们为PartyInvites应用程序项目添加了两个c#文件:GuestResponse.cs和ResponseReposi ...
- 解决Pytohn安装第三方库出现read timed out 问题
输入pip --default-timeout=100 install -U Packages 如pip --default-timeout=100 install -U Pillow
- Liunx操作指令搜素引擎
链接:http://wangchujiang.com/linux-command/c/vi.html