• 手机站
  • 收藏
聚培教育网合作机构 > 西安博为峰教育
西安博为峰教育
400-998-6158
西安博为峰教育

python私有变量怎么定义

python学习网

更新时间:2023-01-10 浏览:215
核心提示:python私有变量怎么定义变量前加双下划线(只前缀双下划线),将被认为是私有变量,单下划线开头的成员变量和成员函数,其实就是p

python私有变量怎么定义

变量前加双下划线(只前缀双下划线),将被认为是私有变量,单下划线开头的成员变量和成员函数,其实就是public的,在类外不能访问,否则认为是公有的变量。
Python中默认的成员函数、成员变量都是公开的(public),而且python中没有类似public、private等关键词来修饰成员函数,成员变量。
在python中定义私有变量只需要在变量名或函数名前加上 "__" (两个下划线),那么这个函数或变量就会成为私有的了。
class aa:
'descript class aa'
__x = 12
def __init__(self):
print 'aa init....'
self._name = 'jeapedu'
@classmethod
def p(cls):
print 'class method?'
def getname(self):
return self._name
def setname(self, v):
self._name = v
name = property(getname, setname,fdel = None, doc = "propertyTest")
class bb(aa):
y = 13
def __init__(self):
print 'bb init....'
aa.__init__(self)
a = aa()
aa.p()
a.name = 'Jeapedu'
print a.name
print aa.__dict__
print a.__x
b = bb()
print "b.y, bb.y", b.y, bb.y
print bb.__dict__
#print b.__x, # 双下划线__x,是父类aa的私有变量,子类不可访问

运行结果
aa init....
class method?
Jeapedu
{'__module__': '__main__', '_aa__x': 12, 'name': <property object at 0x00BBAB40>, 'setname': <function setname at 0x00BBF830>, 'getname': <function getname at 0x00BBF7B0>, 'p': <classmethod object at 0x00BC7650>, '__doc__': 'descript class aa', '__init__': <function __init__ at 0x00BBF870>}
bb init....
aa init....
b.y, bb.y 13 13
{'y': 13, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00BBF8B0>}
<<< Process finished. (Exit code 0)
比较奇怪的是x前后有双下划线上边程序注释掉的语句可以执行,原因是前后双下划线的是给系统用的,用户一般不要定义这样的变量比较好!前后缀双下划线变量。
而前缀单下划线的变量是python普通变量。


更多>同类资讯
更多>相关课程
顶部