知识点-python类的私有保护属性和⽅法
类的私有属性:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使⽤或直接访问。
在类内部的⽅法中使⽤时  self.__private_attrs。
类的⽅法:
在类地内部,使⽤def关键字可以为类定义⼀个⽅法,与⼀般函数定义不同,类⽅法必须包含参数self,且为第⼀个参数
类的私有⽅法 :
__private_method:两个下划线开头,声明该⽅法为私有⽅法,不能在类地外部调⽤。
在类的内部调⽤ self.__private_methods
默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量。在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个
下划线,那么这个函数或变量就是私有的了。
在内部,python使⽤⼀种 name mangling 技术,将 __membername替换成 _classname__membername,也就是说,类的内部定义中,
所有以双下划线开始的名字都被"翻译"成前⾯加上单下划线和类名的形式。
例如:为了保证不能在class之外访问私有变量,Python会在类的内部⾃动的把我们定义的__spam私有变量的名字替换成为
_classname__spam(注意,classname前⾯是⼀个下划线,spam前是两个下划线),因此,⽤户在外部访问__spam的时候就会
提⽰不到相应的变量。  python中的私有变量和私有⽅法仍然是可以访问的;访问⽅法如下:
私有变量:实例._类名__变量名
私有⽅法:实例._类名__⽅法名()
class people():
__place = "nanjing"
_age1 = 20
def__init__(self, name):
self.name = name
def__sayhello(self):
print("%s say hello" % self.name)
class teacher(people):
pass
t1 = teacher("cmz")
print(t1._people__place)  # 访问私有变量
t1._people__sayhello()    # 访问私有⽅法
结果是
nanjing
cmz say hello
python私有属性和⽅法案例
其实,Python并没有真正的私有化⽀持,但可⽤下划线得到伪私有。尽量避免定义以下划线开头的变量!
(1)_xxx      "单下划线"开始的成员变量叫做保护变量,意思是只有类实例和⼦类实例能访问到这些变量,
需通过类提供的接⼝进⾏访问;不能⽤'from module import *'导⼊
(2)__xxx    类中的私有变量/⽅法名(Python的函数也是对象,所以成员⽅法称为成员变量也⾏得通。),
" 双下划线 "开始的是私有成员,意思是只有类对象⾃⼰能访问,连⼦类对象也不能访问到这个数据。
(3)__xxx__ 系统定义名字,前后均有⼀个“双下划线” 代表python⾥特殊⽅法专⽤的标识,如 __init__()代表类的构造函数。
class people():
__place = "nanjing"
_age = 20
def__init__(self, name):
self.name = name
def _test(self):
print("from people test")
def__sayhello(self):
print("%s say hello" % self.name) class teacher(people):
pass
t1 = teacher("cmz")
print(t1._age)
print(people._age)
t1._test()
people._test(t1) # 传⼊对象t1
结果是
20
20
from people test
from people test
单下划线
class people():
__place = "nanjing"
_age = 20
大学python知识点汇总
def__init__(self, name):
self.name = name
def__sayhello(self):
print("%s say hello" % self.name) class teacher(people):
pass
t1 = teacher("cmz")
print(t1._people__place)
t1._people__sayhello()
结果是
nanjing
cmz say hello
双下划线

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。