前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 面向对象之析构函数

python 面向对象之析构函数

作者头像
py3study
发布2018-08-02 16:25:13
7900
发布2018-08-02 16:25:13
举报
文章被收录于专栏:python3

析构函数: 

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

析构函数,是无法传参的

代码语言:javascript
复制
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 彻底死了...

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

再执行一个类里面的函数

代码语言:javascript
复制
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变成私有属性,外部测试访问

代码语言:javascript
复制
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'

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

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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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'

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/03/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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