详细见老师博客: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. 【学习】在Windows10平台使用Docker ToolBox安装docker(一)

    前言:今天距离元旦还有44天,时间点是18:11:45,想了想一路学习的过程和其中遇到的困难,其中有克服的,有放弃的,这有可能是我自己意志不坚定吧,学习docker也是我当下的一个目标,不知道会是成功 ...

  2. ConcurrentModificationException 异常处理

    在工作中碰到有个异常:java.util.ConcurrentModificationException 腾讯bugly工具给出的解决方案和说明如下:该异常表示迭代器迭代过程中,迭代的对象发生了改变, ...

  3. 软件性能测试技术树(三)----数据库(MySQL)性能

    全图: MySQL重点监控指标: MySQL主流分支: 数据库架构设计: MySQL慢查询: SQL语句分析与调优: MySQL索引: MySQL存储引擎: MySQL实时监控: MySQL集群监控工 ...

  4. 基于Spring cloud Ribbon和Eureka实现客户端负载均衡

    前言 本案例将基于Spring cloud Ribbon和Eureka实现客户端负载均衡,其中Ribbon用于实现客户端负载均衡,Eureka主要是用于服务注册及发现: 传统的服务端负载均衡 常见的服 ...

  5. 大战Java虚拟机【1】—— 内存

    前言 要了解Java虚拟机首先要知道的基础就是内存.虚拟机存在的意义就是对内存进行管理,因为不用人为的去管理每个对象的内存,所以才让java使用起来那么方便,不用像c.c++那样去free. 运行时数 ...

  6. C#7.0新特性

    前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7 ...

  7. ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

    转载:https://www.cnblogs.com/alsf/p/6344197.html 1.row_number() over()排序功能: (1) row_number() over()分组排 ...

  8. 单元测试与Mockito

    1.什么是单元测试? 顾名思义单元测试就是对软件系统中最小的单元(函数.类)做测试,类似焊接电路板前对每个电容器(电子元器件)的测试.从软件测试分级来看,单元测试是最底层也是离程序员最近的一层,一般由 ...

  9. (3)Maven快速入门_3在Eclipse中创建Maven项目打包成jar

    Eclipse中创建Maven项目 new ---> maven project  ----> next 如下 普通java项目 选择  如下 quickstart 创建项目 : 输入 G ...

  10. OO Homework One Notes

    系数/指数 过大 溢出(True) eg. - +999999999454554999999 * x ^ -85858554545454545548585858858 x前存在两个符号,与x有空格分离 ...