双下方法

双下方法是开发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)__特殊双下方法...相关推荐

  1. python特殊变量方法 不懂_Python中的常见特殊方法—— del方法

    __del__() 方法用于销毁Python对象--在任何Python对象将被系统回收的时候,系统都会自动调用这个方法.但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果 ...

  2. python 不安全的包或方法_Python中的10个常见安全漏洞及修复方法

    写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 ...

  3. python编写ATM类_Python中编写类的各种技巧和方法

    有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling).你可以把它当作一个教程, ...

  4. python类中的属性分为类属性和实例属性两种_python从入门到大神---1、初始化实例、类属性、方法...

    python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...

  5. python连续两个冒号是什么成语_python中双冒号

    1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f ...

  6. python中的下划线_Python中的下划线详解

    这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...

  7. python中类的用法_Python中的类和方法使用举例

    成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...

  8. python中的方法和函数的区别_python中函数与方法的区别?

    Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...

  9. python提供了_Python中 为我们提供了一些独特的解决方案的方法特性

    实际上,在日常的工作中,我们很多需求,无论是常见的.还是不常见的,Python 都为我们提供了一些独特的解决方案,既不需要自己造轮子,也不需要引入新的依赖(引入新的依赖势必会增加项目的复杂度). 但是 ...

最新文章

  1. 10亿用户之后,为什么是百度率先打破花园围墙?
  2. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
  3. 关于selenium+java,实现部分截图功能,-针对单个元素的截图
  4. js页面加载前执行_做一名合格的前端开发工程师:Javascript加载执行问题探索
  5. canvas 插件_基于canvas的JavaScript 二维码生成工具——QRCanvas
  6. 如何在SQL Server中自动进行表分区
  7. SpringCloudAlibaba--Seata简单案例
  8. apache+gzip+ssl网页压缩率50%
  9. 大众点评Cat源码分析(四)——Report读写逻辑
  10. win10系统如何安装Oracle 10G
  11. STC15单片机定时器0工作模式介绍
  12. 咖啡店管理系统设计与实现C语言,答粉丝问|GUI编程实例化之咖啡店点单系统
  13. javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx not verified
  14. 微信小程序幽默风和git
  15. 2019-nCoV肺炎疫情同程查询-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口
  16. 秉火429笔记之六按键检测
  17. 计算一个有向图中出度为零和入度为零的顶点个数
  18. XSS漏洞简单概述--UGa
  19. 学习运动控制卡难不难前提一定要会C #语言编程吗运动控制卡都有哪些品牌呢C#语言不会英文可以学习吗C#语言编程自学可以吗初中学历可以学习运动控制卡吗
  20. 向日葵远控软件无法复制粘贴问题 解决方法

热门文章

  1. 分布式计算Hadoop系列之如何修改Eclipse插件
  2. vs中没有fstream_vs++2010 编译说找不到 fstream.h 解决方法
  3. 将一张图片分割成多张小图片 Python3
  4. MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解
  5. solr/lucence和关系数据库的混合使用
  6. windows端口查看及进程查找
  7. php实现socket编程
  8. 怎样复制粘贴windows命令行中的内容
  9. 元宇宙大比拼:苹果Apple, Facebook,微软,英伟达,iwemeta
  10. sklearn-GridSearchCV调节超参数