一步一步来,你会发现——你正在逐渐变成你想要变成的那个模样~
1、私有方法和私有属性:
Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。
在python中定义私有变量只需要在变量名或函数名前加上 两个"_"(下划线),那么这个函数或变量就会为私有的
注意:当使用下划线来声明该方法为私有方法,那么不能在类的外部调用
代码:
# coding=utf-8
class pub(object):
# 一个普通方法
def test(self):
print('这是一个test方法')
def _test(self):
print('这是一个_test方法')
def __test(self):
print('这是一个__test方法')
pub = pub()
pub.test()
pub._test()
pub.__test()
结果:
发现’test’ ‘_test’ 这两个方法都可以打印出来 但是唯独’__test’ 这个方法不可以打印
这里我们就可以发现’__test’ 这个方法就是类的私有方法
那我们真的没有办法去使用这个私有方法了吗 ???
2、第一种方法:加前缀
dir函数
描述:
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
dir 语法:
dir([object])
我们可以使用dir函数去看下当前类的属性、方法,返回结果以列表的方式返回
代码:
# coding=utf-8
class pub(object):
__testc = '这是私有属性__testc'
# 一个普通方法
def test(self):
print('这是一个test方法')
def _test(self):
print('这是一个_test方法')
def __test(self):
print('这是一个__test方法')
pub = pub()
pub.test()
pub._test()
print(dir(pub))
结果:
我们发现了 三个刚才定义的相关test的方法 其中两个相同 还有一个还有个前缀’_pub’
所以我们发现 其实所谓的私有方法 其实就是加了前缀 所以我们直接__test 这样是无法调用的 那么我们同样改成_pub__test 试试看
发现能够调用出私有方法
第二种方法:类中调用
原理:外界无法访问私有方法,但可以在类内部方法私有方法(相当于一个中间人的作用 类似于arp欺骗哈!!!)
代码:
# coding=utf-8
class pub(object):
# 一个普通方法
def test(self):
print('这是一个test方法')
pub.__test()
def _test(self):
print('这是一个_test方法')
def __test(self):
print('这是一个__test方法')
pub = pub()
pub.test()
结果:
虽然自己讲的都是私有方法 但是其实私有属性和私有方法的是类似的哈!!!
总结:
Python中没有像C++中public和private这些关键字来区别公有属性和私有属性
它是以属性命名方式来区分,如果在属性名前面加了2个下划线’__’,则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。