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 ...
随机推荐
- Mac上安装mariadb
1.查看mariadb包信息 # brew info mariadb mariadb: stable 10.2.6 (bottled) Drop-in replacement for MySQL ht ...
- git pull 总要求输入账号和密码解决?
如果你用git从远程pull拉取代码,每次都要输入密码,那么执行下面命令即可 git config --global credential.helper store 这个命令则是在你的本地生成一个账号 ...
- Codeforces 914F. Substrings in a String(bitset)
比赛的时候怎么没看这题啊...血亏T T 对每种字符建一个bitset,修改直接改就好了,查询一个区间的时候对查询字符串的每种字符错位and一下,然后用biset的count就可以得到答案了... # ...
- QT 设置菜单图标
目录 一.添加主窗口菜单 二.添加菜单图标 三.添加资源文件 四.使用资源文件 五.使用代码来添加菜单和图标 正文 一.添加主窗口菜单 1.新建Qt Gui应用,项目名称为myMainWind ...
- C++中的空类,编译器默认可以产生哪些成员函数
C++中的空类,编译器默认可以产生哪些成员函数 C++中创建一个空类:class Empty {};默认会生成4个函数,其函数的原型如下: public: Empty() { ... } Empty( ...
- 【题解】Catering World Finals 2015 上下界费用流
Prelude 传送到Codeforces:0.0 Solution 板子题,在这里贴个板子. 这题面是smg?题面中有说每个点只能经过一次吗?是我瞎了吗? 因为这WA on test 27一个小时, ...
- centos禁用ipv6
两步完成 vi /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6=1sysctl -p /etc/sysctl.conf
- python【内置函数&自定义函数】
=========================random函数:=======================
- Node.js 被分叉出一个项目 — Ayo.js,肿么了
(注:ayo.js叉从Node.js.目前,大量的文档仍然指向Node.js库.) ayo.js是一个JavaScript运行时建立在Chrome的V8 JavaScript引擎.ayo.js使用事件 ...
- 数据分析与展示---Matplotlib入门
简介: 一:Matplotlib库的介绍 (一)简单使用 二:区域划分subplot 三:plot函数 四:pyplot的中文显示 (一)方法一:修改rcParams参数 (二)方法二(推荐),在有中 ...