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 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...
随机推荐
- Snow的追寻--线段树维护树的直径
Snow终于得知母亲是谁,他现在要出发寻找母亲.王国中的路由于某种特殊原因,成为了一棵有n个节点的根节点为1的树,但由于"Birds are everywhere.",他得到了种种 ...
- python每日一练:0011题
第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. 北京 程序员 公 ...
- 【转】centos7安装
转自:https://blog.csdn.net/qq_42570879/article/details/82853708 1.CentOS下载CentOS是免费版,推荐在官网上直接下载,网址:htt ...
- HDU 1864 最大报销额 0-1背包
HDU 1864 最大报销额 0-1背包 题意 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上, ...
- python3—廖雪峰之练习(三)
列表生成式练习 请修改列表生成式,通过添加if语句保证列表生成式能正确执行: L1 = ['Hello', 'World', 18, 'Apple', None] L2 = [] for x in L ...
- 图——图的Dijkstra法最短路径实现
1,最短路径的概念: 1,从有向图中某一顶点(起始顶点)到达另一顶点(终止顶点)的路径中,其权值之和最小的路径: 2,问题的提法: 1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其它 ...
- linux中的文件类型以及查看文件类型的方法
Linux文件类型和文件的文件名所代表的意义是两个不同的概念,在linux中文件类型与文件扩展名没有关系.它不像Windows那样是依靠文件后缀名来区分文件类型的,在linux中文件名只是为了方便操作 ...
- MySQL索引优化(索引两表优化案例)
建表SQL CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT ...
- 点击Listview列头排序
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) ListView1.Sorted = ...
- 03python面向对象编程之多态和枚举6
7.多态性 对于弱类型的语言来说,变量并没有声明类型,因此同一个变量完全可以在不同的时间引用不同的对象.当同一个变量在调用同一个方法时,完全可能呈现出多种行为(具体呈现出哪种行为由该变量所引用的对象来 ...