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 ...
随机推荐
- RL_RTX函数
1 延时:os_itv_set(usFrequency) //设置延时周期,配合os_itv_wait使用:os_itv_wait() 是绝对延迟是包含调用前的时间, os_dly_wait() 是相 ...
- MS SqlServer之Exec和EXEC SP_EXECUTESQL
exec执行sql时字符串时,不能给变量赋值,如果要在sql里给变量赋值,请用EXEC SP_EXECUTESQL 示例: 通过 SP_EXECUTESQL 的第2个参数来定义有哪些参数 输出的加OU ...
- nginx配置SSL证书实现https服务
在前面一篇文章中,使用openssl生成了免费证书 后,我们现在使用该证书来实现我们本地node服务的https服务需求.假如我现在node基本架构如下: |----项目 | |--- static ...
- 字节码技术---------动态代理,lombok插件底层原理。类加载器
字节码技术应用场景 AOP技术.Lombok去除重复代码插件.动态修改class文件等 字节技术优势 Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用 ...
- mysql explain 的extra中using index ,using where,using index condition,using index & using where理解
using index :查找使用了索引,查询结果覆盖了索引 using where:查找使用了索引,不需要回表去查询所需的数据,查询结果是索引的一部分 using index condition:查 ...
- 【踩坑】spring每次请求后session不一样导致无法在服务器保存信息
根据网上的资料,若想在服务器用session保存一些信息,方法如下: public Xclass Xmethod(HttpServletRequest request, HttpSession ses ...
- Python定时任务sched(一)
这里介绍一下python中定时任务:sched python中自带的是sched,也可以通过pip下载schedule进行任务定时处理,这里先简单介绍下sched的使用 import datetime ...
- SQL数据库基础二
- Linux环境下mysql的root密码忘记解决方法(2种)
方法一: 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...