Python之构造和析构,算术运算,属性访问

魔法方法

魔法方法总是被双下划线包围,例如__init__(self[,...])
魔法方法就是当你在进行一些操作的时候默认的调用的一些方法,你可以按照自己的逻辑修改这些方法。

Python中的魔法方法

构造器

__init__(self[,...])
__new__(cls[,...])
魔法方法的魔力体现在他们总是能在适当的时候被调用,例如实例化对象的时候会自动调用__init__(self[,...])方法。
实例化对象的时候第一个被创建的方法是__new__(cls[,...])。cls参数代表的就是调用者这个类,他会返回一个类的对象,通常返回参数中cls的对象。一般情况下这个方法不会被重写,用python的默认的就行。cls后边的参数会原封不动的传给__init__(self[,...])方法。
__new__(cls[,...])被调用的情况是当继承一个不可变类型的时候,有需要进行修改的时候,我们就需要重写__new__(cls[,...])方法。

class CapStr(str):
      def __new__(cls,string):
             string=string.upper()#因为str是不可变类型,所以再生成对象之前先对字符串进行改造,然后将改造后的字符串传到str里面,获得改造后的字符串的str对象。
             return  str.__new__(cls,string)

析构器

__del__(self)
__del__(self)方法是当对象将要被销毁时候自动调用的。当垃圾回收机制要回收这个对象的时候,此方法会被自动调用(当没有任何变量去引用这个对象的时候,垃圾回收机制就会回收这个对象)。也可以说是当没有变量指向这个对象的时候就会被删除。

#有一个C类
c1=C()
c2=c1
c3=c2
del c3#这个时候不会调用__del__(self)方法,只是把c3这个引用删除
del c2#这个时候不会调用__del__(self)方法,只是把c2这个引用删除
del c1#这个时候会调用__del__(self)方法,没有了引用,垃圾回收机制就会回收这个实
例对象。

算术运算

在python中万物皆对象,所以想int,list,char等都是对象
也有很多内置函数以及魔法函数

算术运算的魔法方法

这些魔法方法例如__add__(self,other)是在

a=int("123")
b=int("23")
a+b#a自动调用__add__(self,other)方法进行两对象的想加

属性访问

__getattr__(self,name)

定义当用户试图获取一个不存在的属性时的行为
只有访问不存在的属性才会被调用
__getattribute__(self,name)
定义当该类的属性被访问时的行为,不论这个属性是否存在。
这个魔法方法会在__getattr__(self,name)之前执行。
__setattr__(self,name,value)
定义一个属性被设置时的行为
当重写__setattr__(self,name,value)并在此方法内部进行复制操作时,为了避免递归死循环需要使用 super.__setattr__(name,value),或者是self.__dict__[name]=value。第一种方法是调用父类的赋值魔法方法,第二种是找到类的属性集合,并进行赋值。
__delattr__(self,name)
定义一个属性被删除时的行为

你可能感兴趣的:(Python之构造和析构,算术运算,属性访问)