详细见老师博客:http://www.cnblogs.com/Eva-J/articles/7351812.html#_label9

__getitem__\__setitem__\__delitem__

class Foo:
def __init__(self,name,age,sex):
self.age=age
self.name=name
self.sex=sex
def __getitem__(self, item):
print('执行了__getitem__')
if item in self.__dict__.keys():
# return self.item 此处不能这样写,会报错,没有这个属性
return self.__dict__[item]
else:
print('have no your find')
def __setitem__(self,key,value):
print('执行了__seritem__')
self.__dict__[key]=value
def __delitem__(self,key):
print('执行了__delitem__')
del self.__dict__[key]
alex= Foo('alex',18,'male')
print(alex['name'])#调用了__getitem__
print(alex.name)#正常的调法
alex.age=20#正常的改法
print(alex.__dict__)
alex['age']=200#调用了__setitem__,并且改正了值
print(alex.__dict__)
del alex['name']#调用了__delitem__
#此时的del 并不是删除的意思,而是调出了__delitem__
#这个方法而已,所以需要在__delitem__中加入删除的代码
print(alex.__dict__)
'''输出结果执行了__getitem__
alex
alex
{'age': 20, 'sex': 'male', 'name': 'alex'}
执行了__seritem__
{'age': 200, 'sex': 'male', 'name': 'alex'}
执行了__delitem__
{'age': 200, 'sex': 'male', 'name': 'alex'}
'''

注意__item__的各个内置函数的调用,

__getitem__的调用方式是:对象[key]

            等价的调用方式:对象.属性

__setitem__的调用方式是:对象[key]=value

            等价的调用方式:对象 .属性=value

__delitem__的调用方式时:del 对象[key]  只是调用了__delitem__方法而已,并不是真正的删除

            等价的调用方式:del 对象.属性

这个方法主要是记住所有的 . 变为[],便可以调此方法了

有一个的函数的调用方式很相似:

      记起来了,这个是把方法变为属性的装饰器@property,通过修改达到了和正常属性的调法

面向对象_item项目的更多相关文章

  1. 面向对象-QuickHit项目

    package com.ketang.game; /** * 游戏级别类 * @author * */ public class Level { private int levelNo; //各级别编 ...

  2. THE LAST ONE!! 2017《面向对象程序设计》课程作业八

    THE LAST ONE!! 2017<面向对象程序设计>课程作业八 031602230 卢恺翔 GitHub传送门 题目描述 1.时间匆匆,本学期的博客作业就要结束了,是否有点不舍,是否 ...

  3. 招聘.NET开发人员(截止于2015-06-15)

    文章更新 2015-06-15 01:00AM: 感谢各位的支持,简历和解决方案接收截止.2015-06-08 08:30AM: 已经收到一些简历和解决方案,正在筛选中.职位仍然开放,欢迎发送简历及解 ...

  4. 面向侧面的程序设计AOP-------《二》本质

    本文转载自张逸:晴窗笔记 AOP技术本质 2.2.1 技术概览 AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Prog ...

  5. 手写一个自己的简单MVC框架myPHP

    myPHP框架 采用的是MVC 思想,应用纯面向对象及项目单一入口,实现的一个自定义的框架.(自己兴趣的练习) 一.项目单一入口 入口文件 myphp\index.php前台 一个网站所有的请求都请求 ...

  6. C++ 我想这样用(一)

    虽然还是菜鸟,但我是一个地地道道的c程序员,甚至一度很讨厌C++(虽然现在也是). 为了在不用C++的情况下学习和使用面向对象而长期奔走,曾经用过一年的Python,后终放弃.之后很长一段时间里摆弄O ...

  7. AOP技术基础

    1.引言 2.AOP技术基础 3.Java平台AOP技术研究 4..Net平台AOP技术研究 2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto ...

  8. spl_autoload_register()

    5.3版本增加了命名空间prepend函数   <?php // function __autoload($class) {//     include 'classes/' . $class  ...

  9. AOP 面向方面的编程 Aspect Oriented Programing --第一次听说呢,汗!

    http://wayfarer.cnblogs.com/articles/241024.html 抄在这里,方便复习! AOP技术基础   1.引言2.AOP技术基础 3.Java平台AOP技术研究4 ...

随机推荐

  1. 使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序

    本文于2019年04月10日将标题「CentOS7 部署 ASP.NET Core应用程序」修改为「使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序」. 环境准备 VMwa ...

  2. Android_ FragmentTabHost切换Fragment时避免重复加载UI

    使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...

  3. 封装cookie设置和获取的简易方法

    (function() { var tool = { expires: "expires", // 过期时间expires path: "path", // 路 ...

  4. EF架构~mysql中时间戳字段被认为是主键自增

    回到目录 如果在mysql中添加了自增字段,用来维护行的版本,那么在EF中会有一个问题,会把它当成是数据表主键,当你的真正主键是自曾时,就会把默认值0拼到生成的SQL语句里,导致你的insert出错, ...

  5. RabbitMQ消息队列(二)-RabbitMQ消息队列架构与基本概念

    没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中 ...

  6. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(2)- 界面构建(wxFormBuilder3.8.0)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之界面构建. 一个软件的UI界面是非常重要的,这是软件与用户交互的接口,软件功能即使再强大,但如果没 ...

  7. Jenkins结合.net平台之ftp客户端

    上一节我们讲解了如何配置ftp服务端,本节我们讲解如何使用winscp搭建ftp客户端,为什么使用winscp而不是filezilla客户端版,前面我们简单说过,这里不再赘述. 下载winscp以后我 ...

  8. ssh转发代理:ssh-agent用法详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 使用ssh-agent之前 使用ssh公钥认证的方式可以免去ssh客户端(如 ...

  9. 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!

    从2016年1月开始写博客,默默地更新<Spring Boot系列教程>,从无人问津到千万访问,作为一个独立站点(http://blog.didispace.com),相信只有那些跟我一样 ...

  10. eclipse创建的maven项目,pom.xml文件报错解决方法

    [错误一:]maven 编译级别过低 [解决办法:] 使用 maven-compiler-plugin 将 maven 编译级别改为 jdk1.6 以上: <!-- java编译插件 --> ...