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 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...
随机推荐
- Java多线程学习——sleep和yield
Thread.sleep(); Thread.yield(); 相同点: 让线程暂停运行. 都是静态方法,可以直接调用. 不同点: sleep让线程从运行状态进入阻塞状态,但是不放开手中的资源. yi ...
- C语言第九周编程作业
这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪里 https://pintia.cn/problem-sets/1120145772099268608 我在这个课程的目标是 了解结构 ...
- JavaWeb返回Json格式数据JQuery Ajax无法解析的问题
今天在写实验室的傻逼Java Web小项目的时候,有一个需要发布内容的地方,因为想做的让用户感觉优雅一点 所以就是用了Ajax来做,本来很简单的一个小玩意,竟然花了半个多小时的时间,主要是将时间花在了 ...
- Coding 地址
Coding 连接 https://dev.tencent.com/u/leexi
- DotNetCore知识栈
#..NET Core提供的特性 1.开源.免费 2.轻量级.跨平台 3.组件化.模块化.IOC+Nuget.中间件 4.高性能 5.统一了MVC和WebAPI编程模型 a) 比如:ASP.NET ...
- django部署到linux上不显示.svg图标处理方法
在setting文件的最开始添加如下内容: import mimetypes mimetypes.add_type("image/svg+xml", ".svg" ...
- 在django中使用循环与条件语言
{% if not Article_type_id %} <li class="active"><a href="/">全部</a ...
- 说说无线路由器后门的那些事儿(1)-D-Link篇
[原创]说说无线路由器后门的那些事儿(1)-D-Link篇 作 者: gamehacker 时 间: 2013-11-29,11:29:19 链 接: http://bbs.pediy.com/sho ...
- 虚拟机的linux(CentOS)系统安装
一.安装虚拟机:VirtualBox 1.软件下载:https://www.virtualbox.org/ 2.一路点击下一步完成安装 二.安装linux:CentOS6.8 1.官方网站:ht ...
- PHP curl拓展的介绍和使用
curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com/');//请求url地址curl_setopt($ch, CURLOPT_HEADER, 0); ...