Python概念-Attr系列(林海峰教的)

这个Attr系列是egon老师自创的,个人还是可以接受这种文化底蕴的,所以直接拿来用,也是毫无违和感的

所谓Attr系列,其实是__setattr__,__delattr__,__getattr__ 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看:

__setattr__(self):当对类中的某个属性进行"赋值"时触发的函数

代码示例:

 1 class Teacher:
 2     def __init__(self):
 3         self.name = "Egon"
 4     def __setattr__(self, key, value):#当self.name被赋值时出发函数__setattr__
 5         self.__dict__[key] = value        #将name:egon存放在self的命名空间中也就是在字典中添加一个键值对(key:value)
 6         print(key,"已被赋值:",value)
 7
 8 te = Teacher()#实例化Teacher类,此时已经出发了self.name的赋值
 9
10 #name 已被赋值: Egon

__delattr__(self):当对类中的某个属性进行"删除"时触发的函数

代码示例:

class Teacher:
    def __init__(self):
        self.name = "Egon"
    def __delattr__(self, item):#当self.name被赋值时出发函数__delattr__
        self.__dict__.pop(item)#将self命名空间中name键连同value一起删除
        print(item,"已被删除")

te = Teacher()
del te.name#触发了__delattr__()的方法执行

__getattr__(self):当调用的名字,"没有在实例化对象或类中出现时",触发的函数

代码示例:一定要注意,这里是没有找到名字的时候触发

1 class Teacher:
2     def __init__(self):
3         self.name = "Egon"
4     def __getattr__(self, item):#没有找到属性或方法时,执行次函数
5         print("没有",item,"属性")
6
7 te = Teacher()
8 te.sbegon#很明显Teacher中和te中都是没有sbegon这个属性或方法的,所以触发__getatter__()方法

以上就是Attr系列的小总结

时间: 2024-08-01 03:34:55

Python概念-Attr系列(林海峰教的)的相关文章

python第三方库系列之十四--集群化部署定时任务apscheduler库

如果将定时任务部署在一台服务器上,那么这个定时任务就是整个系统的单点,这台服务器出现故障的话会影响服务.对于可以冗余的任务(重复运行不影响服务),可以部署在多台服务器上,让他们同时执行,这样就可以很简单的避免单点.但是如果任务不允许冗余,最多只能有一台服务器执行任务,那么前面的方法显然行不通.本篇文章就向大家介绍如何避免这种互斥任务的单点问题,最后再介绍一下基于APScheduler的分布式定时任务框架,这个框架是通过多个项目的实践总结而成的. 对于运行在同一台服务器上的两个进程,可以通过加锁实

Python概念-反射之文化底蕴版:反正射了

什么是反射 光在两种物质分界面上改变传播方向又返回原来物质中的现象,叫反射! 以上,是反射的物理定义,与python中的反射概念,完全没有任何关系 书归正传:反射 就是通过字符串的形式,操作对象相关的属性 反射的相关函数: hasattr(object,"name") #返回bool类型,判断object的命名空间中是否存在name这个名字 #存在返回True #不存在返回Flase obj = getattr(object,"name") #获得Object中名称

Python+Django+SAE系列教程16-----cookie&session

本章我们来讲解cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其用法,首先是cookie,我们在view中添加三个视图,一个是显示cookie的,一个是设置cookie的,如下: def show_cookie(request): if "MyTestCookie" in request.COOKIES: return HttpResponse("Cookie[MyTestCookie]的内容是: %s" % request

python爬虫Pragmatic系列III

python爬虫Pragmatic系列III 说明: 在上一篇博客中,我们已经学会了从赶集网上的一家公司中提取出有关的信息,并存储到Excel中. 本次目标: 在本节中,我们将批量下载赶集首页上所有的公司界面(注意不是赶集网上所有的公司页面,我们可以把这个留给之后的任务),并批量的处理所有公司的有关信息,并保存到Excel中. 注意: 在上一篇博客中,我们使用的只是匹配赶集网上其中一家公司界面的中信息,而且不幸的是,很多的其他的公司的联系店主模块中的信息数量并不是固定的,即有的是10个li,而有

python 数据结构 - collections系列

python中collections系列是对字典.元祖等数据结构的补充,不是python内置的,在使用之前,需要用 import collections 导入. 在collections系列中主要有以下内容: 1. Counter(seq) Counter()继承了dict类,其中seq为可迭代对象.接收seq,并以字典形式返回seq中每个元素(hashable)出现的次数. 1 import collections 2 3 s = 'abcdedcbae' 4 l = ['a','b','c'

python第三方库系列之十七--multiprocessing库

说到并发,我们想到多线程和多进程. 那到底使用多进程还是多线程呢?这得看情况.我们的程序一般分为: 1)耗网络的(有很大一部分时间是在网络交互): 2)耗CPU的(得充分利用多核) 在第一种情况,时间大部分被网络延时占用,所以使用多线程和多进程都差不多. 在第二种情况,时间的长短由CPU是否被充分利用决定,看<python第三方库系列之十二--多线程threading库>可知,多线程会出现锁机制,所以多进程更胜一筹,充分利用了CPU,节省了时间. 以下是一个多进程例子: #coding=utf

Python+Django+SAE系列教程11-----request/pose/get/表单

表单request,post,get 首先我们来看看Request对象,在这个对象中包含了一些有用的信息,学过B/S开发的人来说这并不陌生,我们来看看在Django中是如何实现的: 属性/方法 说明 举例 request.path 除域名以外的请求路径,以正斜杠开头 "/hello/" request.get_host() 主机名(比如,通常所说的域名) "127.0.0.1:8000" or"www.example.com" request.g

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库

Python概念-上下文管理协议中的__enter__和__exit__

所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_val, exc_tb):当with运行结束之后触发此方法的运行 exc_type如果抛出异常,这里获取异常的类型 exc_val如果抛出异常,这里显示异常内容 exc_tb如果抛出异常,这里显示所在位置 代码示例:(以自己定义的Open类型做示例) 1 # 编辑者:闫龙 2 class Open: 3