美文网首页
Python之构造和析构,算术运算,属性访问

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

作者: 光羽隼 | 来源:发表于2017-10-28 13:31 被阅读0次

魔法方法

魔法方法总是被双下划线包围,例如__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之构造和析构,算术运算,属性访问

    魔法方法 魔法方法总是被双下划线包围,例如__init__(self[,...])魔法方法就是当你在进行一些操作的...

  • 简介python中的析构函数与构造函数

    python的构造和析构函数为固定的名字。 构造函数 析构函数 不像c++中那样构造函数和析构函数是类名字。并且在...

  • 《Effective C++》学习笔记(3)

    2 构造/析构/赋值运算(续) 条款09:绝不在构造和析构过程中调用 virtual 函数 如果执行BuyTran...

  • C++面向对象(下) Week5——Boolan

    1.Composition下的构造和析构 构造由内而外 析构由外而内 2.Inheritance 下的构造和析构 ...

  • Effective C++笔记

    2.构造/析构/赋值运算 条款05:了解C++默默编写并调用哪些函数 默认构造函数和析构函数主要是给编译器一个地方...

  • 对象特性

    构造函数和析构函数 构造函数:创建对象时为对象的成员属性赋值 没有返回值也不写void 可以有参数,可以重载 析构...

  • c++11 拷贝控制

    拷贝控制操作包括,拷贝构造函数,拷贝赋值运算符,移动构造函数,移动赋值运算符,析构函数。拷贝和移动构造函数定义了用...

  • 18/3

    1.特殊成员函数(6个):默认构造函数、复制构造函数、复制赋值运算符和析构函数、移动构造函数、移动赋值运算符 这些...

  • C#类和结构

    C#类和结构 结构 特点 结构可带有方法、字段、索引、属性、运算符方法和事件 结构可以定义构造函数,但不能定义析构...

  • python 13面向对象

    构造函数 析构函数 私有 类方法 静态方法 属性方法

网友评论

      本文标题:Python之构造和析构,算术运算,属性访问

      本文链接:https://www.haomeiwen.com/subject/kvzjpxtx.html