python内置函数和魔法函数

内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用。比如需要实例化一个对象时,需要调用该类的init方法;使用print去打印一个类时,其实调用的是str方法等等。

  • init(self, …):初始化对象class,在创建新对象时调用。在方法里,可以初始化该对象的属性,否则调用其他时可能出“现has no attribute”错误;
  • del(self):释放对象,在对象被虚拟机删除之前调用;
  • new(cls,*args,**kwd):实例的生成操作,相比init在对象实例化调用做初始化,new方法运行在实例化阶段,修改某些实例化过程;
  • str(self):在使用print语句时被调用,将对象的属性值拼接成字符串返回;
  • getitem(self, key):获取序列的索引key对应的值,需要使用[]操作符的类需要覆盖的,等价于seq[key];
  • setitem(self, key, value):类似geitem,需要seq[key]=value操作的类需要实现该方法;
  • len(self):在调用内联函数len()时被调用;
  • getattr(s, name): 获取属性的值;
  • setattr(s, name, value):设置属性的值;
  • delattr(s, name): 删除name属性;
  • getattribute():getattribute()功能与getattr()类似,无条件被调用,通过实例访问属性。如果class中定义了getattr(),则getattr()不会被调用(除非显示调用或引发AttributeError异常);
  • gt(self, other):判断self对象是否大于other对象;
  • lt(self, other):判断self对象是否小于other对象;
  • ge(slef, other):判断self对象是否大于或者等于other对象;
  • le(self, other): 判断self对象是否小于或者等于other对象;
  • eq(self, other):判断self对象是否等于other对象;
  • call(self, *args): 把实例对象作为函数调用,在一个对象后面加上(),虚拟机就会调用该call方法。

内置变量:

  • name:标识模块的名字的一个系统变量。假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是”main“,通过if判断这样就可以执行“main”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“main”后面的内容;
  • file:用来获得模块所在的路径的,这可能得到的是一个相对路径;
  • package:当前文件为None,导入其他文件,指定文件所在包用 . 分割;
  • doc:文件注释

python英文官方文档详细说明:点击查看

魔法函数

  • Python进阶:实例讲解Python中的魔法函数(Magic Methods)

  • 定制类和魔法方法

  • python中以双下划线开始和结束的函数(不可自己定义)为魔法函数
  • 调用类实例化的对象的方法时自动调用魔法函数(感觉不需要显示调用的函数都叫)
  • 在自己定义的类中,可以实现之前的内置函数,比如下面比较元素sorted时用It函数(lt(self, other):判断self对象是否小于other对象;)
class MyVector(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other_instance):
        re_vector = MyVector(self.x+other_instance.x, self.y+other_instance.y)
        return re_vector

    def __str__(self):
        return"x:{x}, y:{y}".format(x=self.x, y=self.y)

first_vec = MyVector(1,2)
second_vec = MyVector(2,3)
print(first_vec+second_vec)

操作符重载:通过定义类的一些约定的以"__"开头并结尾的函数,可以到达重载一些特定操作的目的

__str__ / __unicode__       
当print一个对象实例时,实际是print该实例 .str()函数的返回值:

class A:
    def __str__(self):
        return "A"
    def __unicode__(self):
        return "uA"

魔法函数有什么作用?

魔法函数可以为你写的类增加一些额外功能,方便使用者理解。举个简单的例子,我们定义一个“人”的类People,当中有属性姓名name、年龄age。让你需要利用sorted函数对一个People的数组进行排序,排序规则是按照name和age同时排序,即name不同时比较name,相同时比较age。由于People类本身不具有比较功能,所以需要自定义,你可以这么定义People类:

class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        return

    def __str__(self):
        return self.name + ":" + str(self.age)

    def __lt__(self, other):
        return self.name < other.name if self.name != other.name else self.age < other.age

if __name__=="__main__":

    print("\t".join([str(item) for item in sorted([People("abc", 18), People("abe", 19), People("abe", 12), People("abc", 17)])]))
  • 上个例子中的__lt__函数即less than函数,即当比较两个People实例时自动调用。

Python中有哪些魔法函数?

Python中每个魔法函数都对应了一个Python内置函数或操作,比如__str__对应str函数,__lt__对应小于号<等。Python中的魔法函数可以大概分为以下几类:

类的构造、删除:

object.__new__(self, ...)
object.__init__(self, ...)
object.__del__(self)

二元操作符:

+	object.__add__(self, other)
-	object.__sub__(self, other)
*	object.__mul__(self, other)
//	object.__floordiv__(self, other)
/	object.__div__(self, other)
%	object.__mod__(self, other)
**	object.__pow__(self, other[, modulo])
<<	object.__lshift__(self, other)
>>	object.__rshift__(self, other)
&	object.__and__(self, other)
^	object.__xor__(self, other)
|	object.__or__(self, other)

扩展二元操作符:

+=	object.__iadd__(self, other)
-=	object.__isub__(self, other)
*=	object.__imul__(self, other)
/=	object.__idiv__(self, other)
//=	object.__ifloordiv__(self, other)
%=	object.__imod__(self, other)
**=	object.__ipow__(self, other[, modulo])
<<=	object.__ilshift__(self, other)
>>=	object.__irshift__(self, other)
&=	object.__iand__(self, other)
^=	object.__ixor__(self, other)
|=	object.__ior__(self, other)

一元操作符:

-	object.__neg__(self)
+	object.__pos__(self)
abs()	object.__abs__(self)
~	object.__invert__(self)
complex()	object.__complex__(self)
int()	object.__int__(self)
long()	object.__long__(self)
float()	object.__float__(self)
oct()	object.__oct__(self)
hex()	object.__hex__(self)
round()	object.__round__(self, n)
floor()	object__floor__(self)
ceil()	object.__ceil__(self)
trunc()	object.__trunc__(self)

比较函数:

<	object.__lt__(self, other)
<=	object.__le__(self, other)
==	object.__eq__(self, other)
!=	object.__ne__(self, other)
>=	object.__ge__(self, other)
>	object.__gt__(self, other)

类的表示、输出:

str()	object.__str__(self)
repr()	object.__repr__(self)
len()	object.__len__(self)
hash()	object.__hash__(self)
bool()	object.__nonzero__(self)
dir()	object.__dir__(self)
sys.getsizeof()	object.__sizeof__(self)

类容器:

len()	object.__len__(self)
self[key]	object.__getitem__(self, key)
self[key] = value	object.__setitem__(self, key, value)
del[key] object.__delitem__(self, key)
iter()	object.__iter__(self)
reversed()	object.__reversed__(self)
in操作	object.__contains__(self, item)
字典key不存在时	object.__missing__(self, key)

原文地址:https://www.cnblogs.com/ranjiewen/p/9219110.html

时间: 2024-10-07 05:29:34

python内置函数和魔法函数的相关文章

Python内置的字符串处理函数整理

Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 函数的使用方法 str='python String function' 生成字符串变量str='python String function' 字符串长度获取:len(str)例:print '%s length=%d' % (str,len(str)) 字母处理全部大写:str.upper()全

python内置常用高阶函数(列出了5个常用的)

原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://blog.csdn.net/cv_you/article/details/70880405 python内置常用高阶函数: 一.函数式编程 •函数本身可以赋值给变量,赋值后变量为函数: •允许将函数本身作为参数传入另一个函数: •允许返回一个函数. 1.map()函数 是 Python 内置的高阶函数,

Python内置的字符串处理函数

生成字符串变量 str='python String function' 字符串长度获取:len(str) 例:print '%s length=%d' % (str,len(str)) 连接字符串 sStr1 = 'strcat' sStr2 = 'append' sStr1 += sStr2 print sStr1 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' print sStr2 比

[摘抄]Python内置的字符串处理函数整理

str='python String function' 生成字符串变量str='python String function' 字符串长度获取:len(str)例:print '%s length=%d' % (str,len(str)) 字母处理全部大写:str.upper()全部小写:str.lower()大小写互换:str.swapcase()首字母大写,其余小写:str.capitalize()首字母大写:str.title()print '%s lower=%s' % (str,st

Python 内置的一些高效率函数用法

1.  filter(function,sequence) 将sequence中的每个元素,依次传进function函数(可以自定义,返回的结果是True或者False)筛选,返回符合条件的元素,重组成一个String,List,Tuple等(跟sequence一样) 示例 def func(x): return x%2==0 and x%3==0 filter(func,(3,6,8,12,15,21)) #(6, 12) 2. map(functiom,sequence) 将sequence

Python内置函数_数学运算类

本文和大家分享的主要是python内置函数数据运算类相关内容,一起来看看吧,希望对大家学习python 有所帮助. abs abs(x) 求绝对值 · X可以是整型,也可以是复数 · 若X是复数,则返回复数的模 >>> abs(-1)1>>> abs(-3+4j)5.0>>> bin bin(x) 将整数x转换为二进制字符串 >>> bin(2)'0b10'>>> bin(3)'0b11' bool bool([x]

Python内置函数进制转换的用法

使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns a

Python补充03 Python内置函数清单

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello World!") 在Python教程中,我们已经提到下面一些内置函数: 基本数据类型 type() 反过头来看看 dir() help() len() 词典 len() 文本文件的输入输出 op

Python内置函数(42)——memoryview

英文文档: class memoryview(obj) memoryview objects allow Python code to access the internal data of an object that supports the buffer protocol without copying. Create a memoryview that references obj. obj must support the buffer protocol. Built-in objec