__init__:当实例化一个类的时候,首相会执行__new__方法创建一个对象,接下来会执行__init__方法对对象的一些属性进行初始化.

所以如果对象有属性,一般会直接写在__init__方法里面:

class Test:
def __init__(self, a, b):
self.a = a
self.b = b test = Test(a, b)

__str__:当实例化一个类之后,就有了一个对象的引用,如 test = Test() 这个时候如果直接print(test),输出的是这个对象所属于的类以及在内存中存储的位置,如果想输出别的信息,可以重定义__str__方法:

class Test:
def __str__(self):
return '这是一个测试类' test = Test() print(test) >>>这是一个测试类

__del__:在一个对象的引用计数成为0后,会自动调用__del__方法来进行一些......善后操作.....

如创建一个对象 test = Test(),这个时候test变量所指向的对象的引用计数为1,

如果手动用del 删除test这个变量,或者程序运行结束系统自动删除它以释放内存空间,

那么对象的引用计数会变为0,同时在删除前调用__del__方法.

class Test:
def __del__(self):
print('已经调用__del__方法...') test = Test() del test print('--------程序结束--------') >>>已经调用__del__方法...
--------程序结束--------

需要注意的是,如果引用计数不为0,也就是如果还有变量指向这个对象,更进一步如果这个对象所在的内存没有被回收,那么是不会调用__del方法的.

如:接上面代码,若实例化一个对象: test = Test(), 下一步 test2 = test,这个时候对象的引用计数就变成了2,如果单单删除test: del test ,是不会调用__del__方法的,

必须要把 test2 也删除 : del test2 , 这个时候才会调用__del__方法.

python__基础 : 类的__init__,__str__,__del__方法的更多相关文章

  1. python中魔法方法__init__,__str__,__del__的详细使用方法

    1. python中的魔法方法, 类似__init__, __str__等等,这些内置好的特定的方法进行特定的操作时会自动被调用 2. __init__的使用方法 class 类名(object):  ...

  2. python__基础 : 类的__new__方法与实现一个单例

    __new__ : 这个方法的作用主要是创建一个实例,在创建实例时首先会调用 __new__方法 ,然后调用__init__对实例进行初始化, 如果想修改 __new__ 这个方法,那么最后要 ret ...

  3. python__基础 : 类的继承,调用父类的属性和方法

    1.继承,调用父类属性方法 在python里面,继承一个类只需要这样写: class Animal: def heshui(self): print('动物正在喝水') class Cat(Anima ...

  4. python__基础 : 类的 __slots__ 方法

    实例在创建出来之后,可以动态的添加属性和方法, 那如果想要限制添加的实例属性,可以用一下 __slots__ 这个东西: class Test(object): __slots__ = ('name' ...

  5. python__基础 : 类属性,类方法,静态方法

    类属性  定义在类里面,方法外面的属性,一般属于这个类,如下面的 num 就是类属性: class Test: num = 类属性用 实例.类属性   或者 类.类属性 都可以访问, 如 a = Te ...

  6. Python基础:面向对象基础 (一) 类及其属性和魔法方法

    定义类,添加和获取对象属性 # 定义类 格式如下 # class 类名: # 方法列表 # 新式类定义形式 # info 是一个实例方法,第一个参数一般是self,表示实例对象本身 class Her ...

  7. __init__、__str__、__del__方法

    1.def__init__()方法: class Cat: """定义了一个Cat类""" #初始化对象 def __init__(self ...

  8. 魔方方法之--类的构造(__init__,__new__)和析构(__del__)方法

    构造方法(参见小甲鱼入门教程) __ init__()方法:类的初始化方法,初始化类对象时被调用,需要的时候再调用它 注意点:这个方法的返回值必须是None class Rectangle(): de ...

  9. 内置函数补充,__str__方法、__del__方法 和 __call__方法和元祖

    一 .内置函数补充 1.isinstance函数: isinstance(obj,cls)检查obj是否是类 cls 的对象 使用该函数来判断一个函数的类型 2. issubclass(sub, su ...

随机推荐

  1. Mahout 系列之--canopy 算法

    Canopy 算法,流程简单,容易实现,一下是算法 (1)设样本集合为S,确定两个阈值t1和t2,且t1>t2. (2)任取一个样本点p属于S,作为一个Canopy,记为C,从S中移除p. (3 ...

  2. 《java入门第一季》之Arrays类前传(排序问题)

    一:冒泡排序 /* * 数组排序之冒泡排序: * 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 * * 引申: * 利用冒泡排序法,可以获取一个数组的最大值(先冒泡排序,取最后一 ...

  3. shell脚本处理长参数的模板

    shell脚本处理长参数的模板 一个shell模板,处理命令行参数,支持长短参数: #!/bin/bash # # FILE: kvm-clone-v2.sh # # DESCRIPTION: Clo ...

  4. java 多线程和线程池

    ● 多线程 多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题. 使用多线程的优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同 ...

  5. 关于MySQL主从复制中UUID的警告信息

    日期: 2014年5月23日 博客: 铁锚 最近在查看MariaDB主从复制服务器 Master 的错误日志时看到很多条警告信息,都是提示 UUID()函数不安全,可能 Slave 产生的值和 Mas ...

  6. Netflix公布个性化和推荐系统架构

    Netflix的推荐和个性化功能向来精准,前不久,他们公布了自己在这方面的系统架构. 3月27日,Netflix的工程师Xavier Amatrain和Justin Basilico在官方博客发布文章 ...

  7. 不用局部变量实现C语言两数交换算法

    关于交换算法,我想非常简单,所以,这次不做分析,直接上代码: #include <stdio.h> #include <stdlib.h> //用异或方式实现 void swa ...

  8. LeetCode之“字符串”:最短回文子串

    题目链接 题目要求: Given a string S, you are allowed to convert it to a palindrome by adding characters in f ...

  9. ListView 与ContextMenu的关联管理

    <span style="font-family: Arial, Helvetica, sans-serif;">package com.example.listvie ...

  10. HBase数据字典

    数据字典用来存储了系统的元数据.HBase的元数据包括:用户表的定义.表的切分方案.分片的分布情况(即分片分布在哪个regionserver上).分片对应的数据文件和日志文件.其中,分片和数据文件的映 ...