私有-—__变量名称
__变量名 等价于 private 变量名,即不允许直接别外部访问和调用。一般通过set和get操作进行间接的访问
示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"Person类"
class Person(object):
def __init__(self, name, age):
# __开头,就变成了一个私有变量,等价于java的private
self.__name = name
self.__age = age
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
def setAge(self, age):
self.__age = age
def getAge(self):
return self.__age
def toString(self):
print("%s:%s"%(self.__name, self.__age))
调用如下
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 访问限制
from Person import *
def runTest():
mPerson = Person("小猫", "2")
mPerson.toString()
mPerson.setName("喵喵")
mPerson.setAge("2.5")
mPerson.toString()
runTest()
运行结果
D:\PythonProject>python main.py
小猫:2
喵喵:2.5
结语
约定俗成的规定
1. Python中,变量名类似xxx的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的
2. Python中,变量名类似__xxx是私有变量,不能直接访问,需要通过set和get进行间接访问
3. 有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
Ps:双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Person__name,所以,仍然可以通过_Person__name来访问__name变量