Python中的魔法方法
Posted missv4you
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的魔法方法相关的知识,希望对你有一定的参考价值。
1.python中的__slots__
1.python中的__slots__
介绍:控制python类中的属性的创建
# 这里创建一个类来进行测试
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
a = SlotsTest("张三",25)
a.city = ‘成都‘
print(a.city)#通过结果可以看到这里如果是正常的创建一个类,是可以通过对象来增加自身的属性
成都
# 现在加入slots这个魔法函数查看效果
class SlotsTest():
__slots__ = (‘name‘,‘age‘)
def __init__(self,x,y):
self.name = x
self.age = y
a = SlotsTest("张三",25)
print(a.name)
a.city = ‘成都‘
‘‘‘
这里可以看到,通过slots来控制对象的一个属性创建,输出了name,但如果实例本身想要创建一个新的属性的时候就会抛出异常
‘‘‘
张三
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-8-7e51ff48629b> in <module>
7 a = SlotsTest("张三",25)
8 print(a.name)
----> 9 a.city = ‘成都‘
AttributeError: ‘SlotsTest‘ object has no attribute ‘city‘
2.python中的__del__
class SlotsTest():
__slots__ = (‘name‘,‘age‘)
def __init__(self,x,y):
self.name = x
self.age = y
def __del__(self):
print("该对象已被销毁")
a = SlotsTest("张三",25)
# 通过输出可以看到,创建对象后自动执行了__del__方法销毁了对象
该对象已被销毁
3.python中的 str 和repr
介绍:当我们需要自定义输出对象的信息的时候可以使用它
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
a = SlotsTest("张三",25)
print(a)
# 可以看到我们如果直接打印这个对象,输出的是一个内存地址的形式
<__main__.SlotsTest object at 0x00000201EF086BA8>
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
def __repr__(self):
return ‘repr自定义对象的输出形式‘
a = SlotsTest("张三",25)
print(a)
自定义对象的输出形式
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
def __str__(self):
return ‘str自定义对象的输出形式‘
a = SlotsTest("张三",25)
print(a)
str自定义对象的输出形式
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
def __repr__(self):
return ‘repr自定义对象的输出形式‘
def __str__(self):
return ‘str自定义对象的输出形式‘
a = SlotsTest("张三",25)
print(a)
# 这里可以看到当这两个同时存在的时候str的优先级会比repr高
str自定义对象的输出形式
4.python中的 call
介绍:使对象变成一个可以调用的方法
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
def __call__(self):
print("__call__方法被调用了")
a = SlotsTest("张三",25)
a()
__call__方法被调用了
5.python中的 setitem
class SlotsTest():
def __init__(self,x,y):
self.name = x
self.age = y
def __setitem__(self,key,value):
self.__dict__[key] = value
b = SlotsTest("张三",25)
b[‘age‘] = 30
print(b.age)
30
以上是关于Python中的魔法方法的主要内容,如果未能解决你的问题,请参考以下文章