python之路-双下方法
双下方法
1.__len__ 计算长度
s = 'nihaoashuaige' print(len(s)) #len作为内置函数,部分数据类型调用它的时候就会返回其长度,那是什么让这个函数起了这样的作用呢 #看一下字符串的str类的内容里有__len__方法,所以调用len内置函数,其实就是触发了__len__方法
class A: def __init__(self,name,age): self.name = name self.age = age def __len__(self): print('调用len方法') return len(self.__dict__) obj = A(') print(len(obj)) 打印结果: 调用len方法 2
2.__hash__
#我们之前说过,可hash的就是不可变的数据类型,那么这个是如何进行判断的呢 print(hash('nihao')) #返回一串数字 print(hash(123)) #返回一串数字 print(hash([1,2,3])) #报错 打印结果: -3334696613266170804 123
3.__str__
class A: def __init__(self,name,age): self.name = name self.age = age def __str__(self): #打印的时候返回的结果值 return self.name obj = A('nihao',18) print(obj) 打印结果: nihao
4.__repr__
class A: def __repr__(self): return 'nihao' obj = A() print(repr(obj)) 打印结果: nihao
5.__call__ 对象后面加(),触发执行
class A: def __init__(self): print(111) def __call__(self, *args, **kwargs): print(666) obj = A() obj() ##对象+()触发__call__方法 打印结果: 111 666
6.__eq__
class A: def __init__(self): self.a = 1 self.b = 2 def __eq__(self, other): print(666) return '比较' a = A() b = A() print(a == b) #同一个类的两个实例进行比较,就会触发类中的__eq__方法 打印结果: 666 比较
7.__del__
8.__new__ 类名+()触发__new__方法 构造方法
class A: def __init__(self,name,age): self.name = name self.age = age def __new__(cls, *args, **kwargs): print(666) return object.__new__(cls) obj = A(') ##构造一个对象是先触发__new__方法
class A: __instance = None def __new__(cls,*args,**kwargs): if not cls.__instance: obj = object.__new__(cls) cls.__instance = obj return cls.__instance ret = A() print(ret) ret = A() print(ret) ret = A() print(ret) 打印结果: <__main__.A object at 0x00000263D5202B00> <__main__.A object at 0x00000263D5202B00> <__main__.A object at 0x00000263D5202B00>
9.__item__相关
class A: def __init__(self,name): self.name = name def __getitem__(self, item): return self.__dict__[item] def __setitem__(self, key, value): self.__dict__[key] = value def __delitem__(self, key): print('删除的时候执行我') ret = A('nihao') print(ret['name']) #执行getitem ret['name'] = 'xiaohong' #执行setitem print(ret.__dict__) del ret['name'] #执行delitem 打印结果: nihao {'name': 'xiaohong'} 删除的时候执行我
10.上下文管理器相关(__enter__ 和 __exit__)
class A: def __init__(self,text): self.text = text def __enter__(self): #开启上下文管理器时执行此方法 self.text = self.text + '来了' return self def __exit__(self, exc_type, exc_val, exc_tb): #执行完上下文管理器时执行此方法 self.text = self.text + '走了' return self obj = A('baobao') with obj as f: print(f.text) print(f.text) 打印结果: baobao来了 baobao来了走了
python之路-双下方法的更多相关文章
- Python 入门 之 双下方法
Python 入门 之 双下方法 1.双下方法 定义:双下方法是特殊方法,它是解释器提供的 由双下划线加方法名加双下划线 方法名的具有特殊意义的方法,双下方法主要是python源码程序员使用的,我 ...
- 百万年薪python之路 -- 面向对象之 反射,双下方法
面向对象之 反射,双下方法 1. 反射 计算机科学领域主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性.python ...
- Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究
Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: 反射的概念是由Smith在1982年首次提出的 ...
- Python面向对象 | 双下方法
定义:双下方法是特殊方法,他是解释器提供的.由双下划线+方法名+双下划线 .它具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更 ...
- Python反射和内置方法(双下方法)
Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...
- Python面向对象之反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法
目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...
- python之面向对象函数与方法,反射,双下方法
一.函数和方法 1.函数和方法的区别 函数: 全都是显性传参,手动传参,与对象无关 方法: 存在隐性传参,与对象有关 1.1通过函数名可以判断 len()就是函数 str.count()就是方法 de ...
随机推荐
- applicationContext中普通数据源不用jndi数据源
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- P4876 近似排列计数50
时间限制:1s 内存限制:256MB [问题描述] 对于一个1-n的排列,如果满足第i个数|ai-i|<=k,则称该排列为K-近似排列. 现在排列的若干位置已经确定,你需要计算剩下的数有多少种排 ...
- 报错:Could not reserve enough space for object heap error
windows命令行运行某个命令时出现: 解决办法: 设置开始->控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量->新建: 变量名: ...
- jsp另外五大内置对象之-out获取缓冲区大小
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- BeautifulSoup库测试代码
import requests from bs4 import BeautifulSoup import time headers={ #'User-Agent':'Nokia6600/1.0 (3. ...
- 如何在Netweaver SE16里直接查看某数据库行记录
有的数据库表字段类型为RAWSTRING, 包含的是XML的二进制内容,无法直接在SE16里显示. 如果确实想看其内容,怎么办?在下面SE16页面的命令提示栏输入命令/h, 回车进入调试模式.然后双击 ...
- UVA 11214 Guarding the Chessboard 守卫棋盘(迭代加深+剪枝)
暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的. 1.最裸的暴搜 6.420s,差点超时 2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放 0.400s # ...
- 【转】iOS开发-文件管理(一)
iOS开发-文件管理(一) 一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.pli ...
- 【转】HTTP Live Streaming直播(iOS直播)技术分析与实现
HTTP Live Streaming直播(iOS直播)技术分析与实现 不经意间发现,大半年没写博客了,自觉汗颜.实则2012后半年,家中的事一样接着一样发生,实在是没有时间.快过年了,总算忙里偷闲, ...
- Ubuntu系统Apache 2部署SSL证书
几天前用Apache 2部署了一个静态网页,但通过域名访问时Google提示“不安全”,经了解,原来是缺少证书. 什么是SSL证书? SSL 是指安全套接字层,简而言之,它是一项标准技术,可确保互联网 ...