1、公有变量
默认上来说对象的属性和方法都是公开的,我们可以通过点这个操作符进行访问
# 公有的属性和方法通过点操作符访问
class Person:
name = '人名'
p = Person()
print(p.name)
2、私有变量
在Python中定义私有变量只需要在变量名或函数名前加上两个下划线"_",那么这个函数或变量就会为私有的了。
无法直接访问私有变量
# 私有变量,通过添加两个下划线定义
class Person:
__name = '人名'
p = Person()
# 无法从外部进行访问
print(p.__name)
调用方法返回内部属性
这里把person当中的name属性私有化后,我们无法在外部访问这个属性,我们可以通过调用方法,返回类的属性,从内部进行访问。
# 私有变量,通过添加两个下划线定义
class Person:
__name = '人名'
# 添加方法从内部进行访问
def getPivateName(self):
return self.__name
p = Person()
# # 无法从外部进行访问
# print(p.__name)
# 通过调用方法从内部访问name属性
print(p.getPivateName())
名字改编
但其实python内部采用了一种叫 name mangling(名字改编)的技术,把双下划线开头的变量进行改名。实际上在外部使用“_类名__变量名“即可访问双下划线开头的私有变量了
# 私有变量,通过添加两个下划线定义
class Person:
__name = '人名'
# 添加方法从内部进行访问
def getPivateName(self):
return self.__name
p = Person()
# # 无法从外部进行访问
# print(p.__name)
# # 通过调用方法从内部访问name属性
# print(p.getPivateName())
# 通过名字改编 name mangling 访问内部属性
print(p._Person__name)
其实这里的私有机制有一点伪私有的感觉,python的类事实上是没有权限控制的