Python_020(几个经典内置方法)
一.内置方法
1.内置方法表示:__名字__
几种名称: 1)双下方法 2)魔术方法 3)类中的特殊方法/内置方法
类中的每一个双下方法都有它自己的特殊意义;所有的双下方法没有 需要你在外部直接调用的
父类Object都带有这些方法,而总是有一些其他的 内置函数 特殊语法来触发双下方法
2.__call__()方法:
class A:
def __call__(self, *args, **kwargs):
print('对象()自动触发我!')
a = A()
a() #这两个步骤还可以写为A()()
1)__call__的一些用法,如果你有两个类,你只想显给别人B类,而不暴露A类,可能在实例化A类之前做一些事情
这时候就需要引入另一个类,让它执行__call__方法
class A:
def __call__(self, *args, **kwargs):
print('执行call方法了')
class B:
def __init__(self,cls):
print('在实例化A之前做一些事情')
self.a = cls() #实例化A的对象
self.a() #调用A类中的call方法
print('在实例化A之后做一些事情')
B(A) #只暴露B,不暴露A
2)__len__方法:
a:遇到len(obj)会自动触发obj的__len__方法
class A:
def __init__(self,obj):
self.obj = obj
def __len__(self):
return len(self.obj)
a = A('wwwwww')
print(len(a))
#结果为6
3)__str__方法:
a:会自动触发该方法的几种情况
1)print一个对象相当于调用一个对象的__str__方法
2)str(obj),相当于执行obj.__str__方法
3)'%s' % obj相当于执行了obj.__str__方法
b:如果类中没有__str__方法,会自动执行父类的Object的__str__方法,但是只会返回给你一个内存地址,因为它不知道你想要得到什么属性;
class A:
pass
a = A()
print(a)
#输出结果:
<__main__.A object at 0x0000024F722690F0> #类中含有__str__方法:
class A:
def __str__(self):
return ('%s, %s, %s')% (self.name,self.age,self.cls)
def __init__(self,name):
self.name = name
self.age = 15
self.cls = 'python'
a = A('zhou')
print(a)
b = A('liu')
print(b)
#输出结果
zhou, 15, python
liu, 15, python
c:有什么用处,特别好用能不用你调用就自动输出一些你需要显示的内容;
4)__new__方法:
a:__new__和__init__的千丝万缕
__new__:开辟内存空间,属于对象的,把对象的空间作为返回值传给self,执行init方法; 类的构造方法
__init__:给对象封装属性; 类的初始化方法
看他们的执行顺序:
class A:
def __new__(cls, *args, **kwargs):
print('执行了__new__方法')
return object.__new__(cls)
def __init__(self):
print('执行了__init__方法')
a = A()
#执行结果
执行了__new__方法
执行了__init__方法
#所以__new__是在对象实例化之前调用的,还没有开辟空间传给self,所以这里会把cls类的空间传进来;
new的金典题目单例类:
单例类:在实例化对象后,每个对象的开辟的空间一样,就是单例类;
class A:
_NAME = None
def __new__(cls, *args, **kwargs):
if not cls._NAME:
cls._NAME = object.__new__(cls)
return cls._NAME
def __init__(self):
pass
a = A()
print(a)
b = A()
print(b)
#输出结果
<__main__.A object at 0x00000221704E9240>
<__main__.A object at 0x00000221704E9240>
Python_020(几个经典内置方法)的更多相关文章
- Python 类的内置方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # p ...
- Python之路(第二十九篇) 面向对象进阶:内置方法补充、异常处理
一.__new__方法 __init__()是初始化方法,__new__()方法是构造方法,创建一个新的对象 实例化对象的时候,调用__init__()初始化之前,先调用了__new__()方法 __ ...
- python黑魔法 -- 内置方法使用
很多pythonic的代码都会用到内置方法,根据自己的经验,罗列一下自己知道的内置方法. __getitem__ __setitem__ __delitem__ 这三个方法是字典类的内置方法,分别对应 ...
- python常用数据类型内置方法介绍
熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...
- 7.python字符串-内置方法分析
上篇对python中的字符串内置方法进行了列举和简单说明,但这些方法太多,逐一背下效率实在太低,下面我来对这些方法按照其功能进行总结: 1.字母大小写相关(中文无效) 1.1 S.upper() -& ...
- 6.python字符串-内置方法列举
所谓内置方法,就是凡是字符串都能用的方法,这个方法在创建字符串的类中,下面是总结: 首先,我们要学习一个获取帮助的内置函数 help(对象) ,对象可以是一个我们创建出来的,也可以是创建对象的那个类, ...
- python 字典内置方法get应用
python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...
- 内置方法+lambda是pythonic的利器
python可以写的非常简洁,通过使用内置的map,reduce,filter,lambda方法,非常具有文艺范. 举个例子,例如 def fromIpToNum(ipAddr): return ...
- 字符串:各种奇葩的内置方法 - 零基础入门学习Python014
字符串:各种奇葩的内置方法 让编程改变世界 Change the world by program 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...
随机推荐
- 应用安全 - 工具 - 知道创宇 - CEYE检测平台
DNS Query
- python 并发编程 多进程 队列目录
python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQue ...
- 第四周总结 and 实验二
课堂总结 一.课堂笔记总览 1.String类两种实例方法区别 String str1 = "hello";String str2 = "hello"; ...
- [转帖]是时候深入了解Linux的系统结构
是时候深入了解Linux的系统结构 http://os.51cto.com/art/201905/596011.htm linux的体系结果 其实自己也知道 linus 做了一个 kernel 大 ...
- ESXi导出的CentOS7 ovf文件导入到workstation 无法打开GUI登录界面的问题解决方案
1. 前几天将centos的机器导出为ovf 文件 然后使用 workstation 引入之后发现总是黑屏 然后有一个 横杠在闪 2. 解决办法是 修改centos的虚拟机配置文件,将显示器修改为这样 ...
- SQL Server中的扩展事件学习系列
SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events SQL Server 扩展事件(Extented Event ...
- CQOJ921B素数和
这是用一道搜索(全排列)实现的一个数论题目.今天周六,上了一天信息,没写数学的我瑟瑟发抖. 首先题意为给定n个数,选取k个数进行求和,输出和为素数的方案数.在写判断素数函数时,我们只需要把i枚举到根下 ...
- 基于gulp的前端自动化方案
前言 最近几年前端技术发展日新月异,特别是单页应用的普及.组件化.工程化.自动化成了前端发展的趋势.webpack已经成为了前端打包构建的主流,但是一些老古董的项目还是存在的,也有优化的必要,正好 ...
- go 关键字之 defer
我是谁 defer - 顾名思义翻译过来叫 延迟, 所以我们通常称呼 defer func() 这样 defer 后面紧跟的函数为 延迟函数. 作者注: 不过从实际应用来讲, 延迟函数通常用来做一些函 ...
- [七月挑选]写个定时任务,从github下载代码到阿里ECS服务器上
title: 写个定时任务,从github下载代码到阿里ECS服务器上 根据前几篇博客中能自己创建一个博客,并在github.io上访问到自己的博客,但是如果自己有服务器,那怎么能定时获取github ...