Python中的魔法方法(一),, 1.python中


1.python中的__slots__

1.python中的__slots__

介绍:控制python类中的属性的创建

# 这里创建一个类来进行测试class SlotsTest():    def __init__(self,x,y):        self.name = x        self.age = ya = SlotsTest("张三",25)a.city = ‘成都‘print(a.city)#通过结果可以看到这里如果是正常的创建一个类,是可以通过对象来增加自身的属性
成都
# 现在加入slots这个魔法函数查看效果class SlotsTest():    __slots__ = (‘name‘,‘age‘)    def __init__(self,x,y):        self.name = x        self.age = ya = 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 = ya = 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] = valueb = SlotsTest("张三",25)b[‘age‘] = 30print(b.age)
30

Python中的魔法方法(一)

评论关闭