概述
一、类中的私有化
类中有私有属性,私有方法,对外保密,也不会被子类继承。
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学习笔记——私有化一、类中的私有化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复