python 面向对象之析构函数

发布时间:2018-03-25 14:51:21编辑:admin阅读(3989)

    析构函数: 


    在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件


    析构函数,是无法传参的

    class Role(object):
        def __init__(self, name):
            self.name = name
        #析构函数
        def __del__(self):
            print('%s 彻底死了...' % self.name)
    
        def shot(self):
            print("shooting...")
    
    r1 = Role('jack')

    执行输出:

    jack 彻底死了...


    现在还没有干啥事情,怎么就执行了呢?

    再执行一个类里面的函数

    class Role(object):
        def __init__(self, name):
            self.name = name
        #析构函数
        def __del__(self):
            print('%s 彻底死了...' % self.name)
    
        def shot(self):
            print("shooting...")
    
    r1 = Role('jack')
    r1.shot()

    执行输出:

    shooting...

    jack 彻底死了...


    当程序退出的时候,实例就销毁了,所以最后执行了析构函数。


    私有属性

    外部不允许直接访问和修改

    比如将name变成私有属性,外部测试访问

    class Role(object):
        def __init__(self, name):
            #私有属性
            self.__name = name
    
        def shot(self):
            print("shooting...")
    
    r1 = Role('jack')
    print(r1.__name)

    执行报错

    AttributeError: 'Role' object has no attribute '__name'


    变成私有属性,在变量名前面加双下划线就可以了。

    那么想在外部获取这个值,怎么办呢?

    虽然外部无法直接访问,但是在类里面,是可以访问的,定义一个方法,用来获取私有属性

    class Role(object):
        def __init__(self, name):
            self.__name = name
    
        def shot(self):
            print("shooting...")
    
        def show_name(self):
            print('name: %s' % self.__name)
    
    r1 = Role('jack')
    print(r1.show_name())

    执行输出:

    name: jack

    None


    在类里面,也可以更改私有属性的值

    class Role(object):
        def __init__(self, name):
            self.__name = name
    
        def shot(self):
            print("shooting...")
    
        def show_name(self):
            self.__name = "Tom"
            print('name: %s' % self.__name)
    
    r1 = Role('jack')
    print(r1.show_name())

    执行输出:

    name: Tom

    None


    定义私有方法,和私有属性是一样的,前面加双下划线即可。

    class Role(object):
        def __init__(self, name):
            self.__name = name
        #私有方法
        def __shot(self):
            print("shooting...")
    
        def show_name(self):
            self.__name = "Tom"
            print('name: %s' % self.__name)
    
    r1 = Role('jack')
    print(r1.__shot())

    执行报错:

    AttributeError: 'Role' object has no attribute '__shot'



关键字