python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...
双下方法
双下方法是开发python这个语言程序员用的,源码中使用的.
我们不能轻易使用双下方法.可能重新写object的源码,慎用!!!
双下方法特征:你不知道干啥了,就会触发某个双下方法
len
class B:
def__len__(self):
print("666")
return 555
b=B()
len(b)
打印结果如下
666
hash
class A:
pass
obj=A()
print(obj)
打印结果如下
可哈希值
str
优先级高于repr
class A:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return f"姓名:{self.name}年龄{self.age}"
a=A("sykrabbit ",20)
print(a)
打印结果如下
姓名:sykrabbit 年龄20
repr
优先级低于str
必须有return
class A:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self)
print(66)
打印结果如下
66
call
对象()自动触发对象从属于类(父类)的__call__方法
object没有call方法
class Foo:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
print('__call__')
obj = Foo() # 执行 __init__
obj() # 执行 __call__
打印结果如下
__call__
eq
比较大小
class A:
def __init__(self,name,age):
self.name=name
self.age=age
def __eq__(self,obj):
if self.a == obj.a and self.b == obj.b:
return True
a = A()
b = A()
print(a == b)
打印结果如下
True
del
析构方法
class A:
def __del__(self):
print(666)
obj=A()
打印结果如下
666
new
在内存当中开辟一个空间产生对象
class A:
def __init__(self):
self.x = 1
print('in init function')
def __new__(cls, *args, **kwargs):
print('in new function')
return object.__new__(A, *args, **kwargs)
#对象是object类的__new__方法 产生了一个对象
a = A()
#类名()
#1.先触发object的__new__方法,此方法在内存中开辟一个对象空间
#2.先执行__init__方法,给对象封装属性
print(a.x)
打印结果如下
in new function
in init function
单例模式
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
一个类只允许实例化一个对象
__item__系列
进行类型字典的增删改查
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self, item):
print(self.__dict__[item])
def __setitem__(self, key, value):
self.__dict__[key]=value
def __delitem__(self, key):
print('del obj[key]时,我执行')
self.__dict__.pop(key)
def __delattr__(self, item):
print('del obj.key时,我执行')
self.__dict__.pop(item)
f1=Foo('sb')
f1['age']=18
f1['age1']=19
del f1.age1
del f1['age']
f1['name']='alex'
print(f1.__dict__)
上下文管理器相关
enter __exit__都是成对的出现
# 如果想要对一个类的对象进行with as 的操作 不行。
class A:
def __init__(self, text):
self.text = text
with A('大爷') as f1:
print(f1.text)
没他们不可以这样操作
class Diycontextor:
def __init__(self,name,mode):
self.name = name
self.mode = mode
def __enter__(self):
print "Hi enter here!!"
self.filehander = open(self.name,self.mode)
return self.filehander
def __exit__(self,*para):
print "Hi exit here"
self.filehander.close()
with Diycontextor('py_ana.py','r') as f:
for i in f:
print i
python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...相关推荐
- python特殊变量方法 不懂_Python中的常见特殊方法—— del方法
__del__() 方法用于销毁Python对象--在任何Python对象将被系统回收的时候,系统都会自动调用这个方法.但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果 ...
- python 不安全的包或方法_Python中的10个常见安全漏洞及修复方法
写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 ...
- python编写ATM类_Python中编写类的各种技巧和方法
有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling).你可以把它当作一个教程, ...
- python类中的属性分为类属性和实例属性两种_python从入门到大神---1、初始化实例、类属性、方法...
python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...
- python连续两个冒号是什么成语_python中双冒号
1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f ...
- python中的下划线_Python中的下划线详解
这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...
- python中类的用法_Python中的类和方法使用举例
成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...
- python中的方法和函数的区别_python中函数与方法的区别?
Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...
- python提供了_Python中 为我们提供了一些独特的解决方案的方法特性
实际上,在日常的工作中,我们很多需求,无论是常见的.还是不常见的,Python 都为我们提供了一些独特的解决方案,既不需要自己造轮子,也不需要引入新的依赖(引入新的依赖势必会增加项目的复杂度). 但是 ...
最新文章
- 10亿用户之后,为什么是百度率先打破花园围墙?
- RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- 关于selenium+java,实现部分截图功能,-针对单个元素的截图
- js页面加载前执行_做一名合格的前端开发工程师:Javascript加载执行问题探索
- canvas 插件_基于canvas的JavaScript 二维码生成工具——QRCanvas
- 如何在SQL Server中自动进行表分区
- SpringCloudAlibaba--Seata简单案例
- apache+gzip+ssl网页压缩率50%
- 大众点评Cat源码分析(四)——Report读写逻辑
- win10系统如何安装Oracle 10G
- STC15单片机定时器0工作模式介绍
- 咖啡店管理系统设计与实现C语言,答粉丝问|GUI编程实例化之咖啡店点单系统
- javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx not verified
- 微信小程序幽默风和git
- 2019-nCoV肺炎疫情同程查询-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口
- 秉火429笔记之六按键检测
- 计算一个有向图中出度为零和入度为零的顶点个数
- XSS漏洞简单概述--UGa
- 学习运动控制卡难不难前提一定要会C #语言编程吗运动控制卡都有哪些品牌呢C#语言不会英文可以学习吗C#语言编程自学可以吗初中学历可以学习运动控制卡吗
- 向日葵远控软件无法复制粘贴问题 解决方法
热门文章
- 分布式计算Hadoop系列之如何修改Eclipse插件
- vs中没有fstream_vs++2010 编译说找不到 fstream.h 解决方法
- 将一张图片分割成多张小图片 Python3
- MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解
- solr/lucence和关系数据库的混合使用
- windows端口查看及进程查找
- php实现socket编程
- 怎样复制粘贴windows命令行中的内容
- 元宇宙大比拼:苹果Apple, Facebook,微软,英伟达,iwemeta
- sklearn-GridSearchCV调节超参数