清水寺小僧 2020-06-10
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