前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python类的构造函数__init__(self)和析构函数__del__详解

Python类的构造函数__init__(self)和析构函数__del__详解

作者头像
王大力测试进阶之路
发布2019-10-25 18:07:54
2.3K0
发布2019-10-25 18:07:54
举报
文章被收录于专栏:橙子探索测试橙子探索测试

一、构造方法__init__(self)

__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。一般用来对实例的属性进行初使化,如果不提供,Python 会给出默认的__init__方法。

class testClass:

def __init__(self, name, gender): //定义 __init__方法,这里有三个参数,这个self指的是一会创建类的实例的时候这个被创建的实例本身(例中的testman),你也可以写成其他的东西,比如写成me也是可以的,这样的话下面的self.Name就要写成me.Name。

self.Name=name //通常会写成self.name=name,这里为了区分前后两个是不同的东东,把前面那个大写了,等号左边的那个Name(或name)是实例的属性,后面那个是方法__init__的参数,两个是不同的)

self.Gender=gender //通常会写成self.gender=gender

print('hello') //这个print('hello')是为了说明在创建类的实例的时候,__init__方法就立马被调用了。

testman = testClass('neo,'male') //这里创建了类testClass的一个实例 testman, 类中有__init__这个方法,在创建类的实例的时候,就必须要有和方法__init__匹配的参数了,由于self指的就是创建的实例本身,self是不用传入的,所以这里传入两个参数。这条语句一出来,实例testman的两个属性Name,Gender就被赋值初使化了,其中Name是 neo,Gender 是male。

class testClass (object):
    def __init__(self, name, gender):#构造函数或类的初始化,创建实例时会被调用
        self.Name = name
        self.Gender = gender
        print ('hello')

testman = testClass ('neo', 'male')
print (testman.Name)
print (testman.Gender)

class tetsClass2 (object):
    def __init__(me, name, gender):#构造函数或类的初始化,创建实例时会被调用
        me.gender = gender
        print ("hello2")
testman2 = tetsClass2 ('neo', 'male')
print (testman2.name)
print (testman2.gender)


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
hello
neo
male
hello2
neo
male

Process finished with exit code 0

二、析构函数__del__

__del__ (),被称为类的析构函数,__del__()在对象消逝的时候被调用,当对象不再被使用时,__del__()方法运行。

当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。  __del__()也是可选的,如果不提供,则Python 会在后台提供默认析构函数

如果要显式的调用析构函数,可以使用del关键字:del obj

class Test(object):
    name='小雷'
    address='上海市'
    def __init__(self,name,age):
        self.name=name
        self.age=age
        print('这里是构造方法')
    def test1(self):
        print(self.name,self.age)
    def __del__(self):
        print('这里是析构函数,清理了')
    def test2(self):
        print(self.name, Test.address)
    def test3(self):
        print('准备被清理的')
Test1=Test('小张',22)
Test1.test1()
Test1.test2()
Test1.test3()
Test2=Test('王大大',33)
Test2.test1()
Test2.test2()
del Test2.test3
Test2.test3()

#试验证明
#1、析构函数__del__等所有程序执行完才会执行
#2、被del的方法,无法再被调用
#3、析构函数会自动被调用
#4、del 方法,会调用析构函数



"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
Traceback (most recent call last):
  File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 89, in <module>
    del Test2.test3
AttributeError: test3
这里是构造方法
小张 22
小张 上海市
准备被清理的
这里是构造方法
王大大 33
王大大 上海市
这里是析构函数,清理了
这里是析构函数,清理了
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档