python魔法方法,python的魔术方法
所谓的MagicMethods就是Python的类级语法,允许你在一个类中定义函数(函数名的格式是__xx__),并绑定到该类的特殊方法上。如果在A类中定义了__str__()函数,那么在调整str (a())时,也会调整_ _ str _ _()函数,并返回相应的结果。
00-1010一、python II内置的基本魔术方法。python III中容器类型的神奇方法。python中算术运算符的魔术方法什么是魔术方法(魔术方法/特殊方法)
神奇的方法不需要手动调用。在特定情况下触发的魔法方法都是python中预定义的。定义方法时,不要使用神奇方法的命名约定。魔法方法以双破折号开始,以双破折号结束。
目录
方法初始化
实例化时init类的方法。
#例如
类Mytest():
def __init__(self):
print(-这是神奇的方法__init__ )
Mytest()
呼叫方法
__call__方法的作用:可以调用对象。
1.当__call__方法未实现时,无法调用该对象。
#类别
Demo:类
及格
#判断一个对象是否可以调用,有一个函数可以使用——callable。
Print (callable (demo))====="返回True,可以被调用
# demo类创建的对象能不能调用不能调用。
obj=Demo()
obj()
执行:提示:“Demo”对象不可调用-没有__call__方法。
2.如果希望调用该类创建的对象,需要使用__call__方法。
Demo:类
def __call__(self,*args,**kwds):
打印(“这是执行的__call__方法”)
打印(可调用(演示))
# demo类创建的对象是否可以调用(不能调用)
obj=Demo()
Obj() #相当于:Obj。__call__()方法
obj()
obj()
新方法
__new__ method 3360的作用是创建对象的方法。
__init__ method 3360的函数是用于初始化对象的方法。
该类的对象应该能够被调用:
主方法new创建对象,然后通过init方法初始化它。
您何时需要使用新方法:
类介入实例化对象的过程。
注意点3360
一般情况下,不要重写新方法,除非有实现它的特定需求。在定义了新方法之后,您需要调用父类的新方法来创建一个对象并返回classmyTest (object) 3360。
#初始化对象
def __init__(self):
打印(-初始化方法)
#创建一个对象
def __new__(cls,*args,**kwargs):
打印(-新方法-)
Obj=super()。__new__(cls) #调用父类的new来创建对象
返回obj #并返回一个新对象
obj=MyTest()
布尔(自我)方法
定义由bool()调用时的行为,该行为应返回True或False。
Demo:类
def __bool__(self):
内置函数bool(),获取对象的布尔值将执行此方法
返回True
b=演示()
#获取对象的布尔值并返回True或False
Print (bool (b))===="返回True
str(self)方法
使用print去输出对象时,输出到控制台的内容是由__str__来决定的
class Demo:def __str__(self):
"""
使用print去输出对象时,输出到控制台的内容是由__str__来决定的
"""
return zifuc
b = Demo()
# str方法
s = str(123)
print(s) =======》 返回 123
repr(self)方法
这个方法也是控制对象显示的,一般会显示对象的原始信息
class Demo:def __repr__(self):
"""
这个方法也是控制对象显示的,一般会显示对象的原始信息
"""
return repr-number
b = Demo()
# repr方法
s = repr(123)
print(s) =======》 返回 123
len(self)方法
获取对象的长度
class Demo:def __len__(self):
"""
这个方法是获取对象的长度
:return:
"""
return 3
b = Demo()
# 获取对象的长度
print(len(b)) =====》 返回 3
hash(self)方法
返回对象的hash值
class Demo:def __hash__(self):
"""
这个方法是获取hash值
:return:
"""
return 999
b = Demo()
# 获取hash值
print(hash(b)) =====》 返回 999
二、python中容器类型的的魔术方法
setitem(self, key, value)方法
定义设置容器中指定元素的行为,语法:self[key] = value
class Mytest:def __setitem__(self, key, value):
return setattr(self, key, value)
m = Mytest()
print(m.__dict__) 没有数据,为空字典
m.name = gddg ==== 》 设置name属性,值为gddg
m[age] = 18 ==== 》 设置age属性,值为18
getitem(self, item)方法
定义获取容器中指定元素的行为,语法: self[key]
class Mytest:def __getitem__(self,item):
return getattr(self,item)
m = Mytest()
print(m[name]) ==== 》 name属性,值为gddg
delitem(self, item)方法
定义删除容器中指定元素的行为,相当于 del self[key]
class Mytest:def __delitem__(self,item):
delattr(self,item)
m = Mytest()
del m[name] ==== 》 删除name属性
contains(self, item)方法
定义当使用成员测试运算符(in 或 not in)时的行为, 返回 True 或 False
class MyTest:def __contains__(self, item):
"""成员运算符触发的魔术方法"""
return True
a = MyTest()
b = MyTest()
print(a in b) =======》 返回 True
迭代协议:__iter__方法
定义当迭代容器中的元素的行为
class IterClass:def __iter__(self):
"""
__iter__方法的返回值必须是一个迭代器
"""
return iter([11, 22, 33, 44]) ===== 》返回一个迭代器
li = IterClass()
for i in li :
print(i )
for遍历对象:
1、执行对象的__iter__方法(返回迭代器)
2、在循环使用next对迭代器进行迭代
三、python中算数运算符的魔术方法
add(a,b)方法 和 sub(a,b)方法
a = 1b = 2
print(a + b) ======》 实际执行的是:a.__add__(a,b)
print(a - b) ======》 实际执行的是:a.__sub__(a,b)
字符串类型的是否支持加减的操作
a = 123b = 12
print(a + b) ======》 实际执行的是:a.__add__(a,b)
print(a - b) ======》 实际执行的是:a.__sub__(a,b)
对字符串对象没有实现__sub__方法,所以不支持对象直接使用 -
自己在重新定义__sub__方法,实现对字符串对象的减法
class MyStr(str):def __sub__(self, other):
return self.replace(other, )
a = MyStr(1234)
b = MyStr(123)
print(a + b) ======= 》 返回 1234123
print(a - b) ======= 》 返回 4
到此这篇关于python深入讲解魔术方法的文章就介绍到这了,更多相关python魔术方法内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。