我是靠谱客的博主 缥缈冬日,最近开发中收集的这篇文章主要介绍Python学习笔记——私有化一、类中的私有化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、类中的私有化

类中有私有属性,私有方法,对外保密,也不会被子类继承。

1、私有属性

下面我们就写个类。

class test(object):
"""docstring for test"""
def __init__(self):
super(test, self).__init__()
self.__num = 100

私有属性__num,下面我们从外面调用下:

这里写图片描述

错误提示:test类没这个属性。

这时候我们一般的做法是暴露出来两个方法,get获取值方法,和set设置值方法。
如下:

这里写图片描述

这样我们就可以访问到了这个属性了。

(偷笑)
其实还有一种方法可以访问到。
就是直接调用。
在之前的直接调用中,为什么我们调用不到呢?
其实是因为Python偷偷的给我们把变量名给改了。

我们利用dir()命令查看这个类中所有的方法和属性。显示如下:

这里写图片描述

看到了么?箭头的标记。py君把私有变量名改为 “_类名+私有变量名” 了,在我这里就是 “_test__num”。下面我们再次调用试试。

这里写图片描述

看看是不是访问到了。不仅能访问,还能修改呢~(千万不要乱用这种方法哟)

2、私有方法

class test(object):
"""docstring for test"""
def __init__(self):
super(test, self).__init__()
def __printName(self):
print('sy')
t = test()
t.__printName()

运行如下:

这里写图片描述

错误提示:test类没这个属性。

私有方法仅限于在这个类中使用。

实质上也是py君改变了私有类的名称,我们用刚才的方法调用试试吧。

这里写图片描述

这种方法知道就好了,不要乱用哦~

二、模块中的私有化

我们先写个模块

num = 100
_num2 = 150
__num3 = 300
def printName():
print('sy')
def _printName1():
print('sy1')
def __printName1():
print('sy2')

利用 from private import * 导入

(顺带复习下之前的import方法)

这里写图片描述

只要是带着”_”的,全部都是未定义错误。

那我们试试import private

这里写图片描述

这样就可以使用了。

我认为原因应该是在用 * 导入的时候,py君会自动过滤掉以 “_” 开头的属性和方法。
(我用 “_private__num2” 方法 也调用不到哟~)

如果直接将整个模块导入,以模块本身的角度是可以去调用模块内的所有属性和方法,包括私有的。

以上。

最后

以上就是缥缈冬日为你收集整理的Python学习笔记——私有化一、类中的私有化的全部内容,希望文章能够帮你解决Python学习笔记——私有化一、类中的私有化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部