访问控制,私有属性-方法

访问控制

私有属性(Private):用双下划线开头的属性名,就是私有属性
class Person:
	def __init__(self,name,age=18):
	 	self name = name
		self.__age = age
	def growup(self,i=1):
		if i > 0 and i < 150:#控制逻辑
			self.__age += i
p1=Person('tom')
p1.growup(20)#正常的范围
print(p1.__age)#可以吗
通过实验可以看出,外部已经访问不到__age了,age根本就没有定义,更是访问不到。那么,如何访问这个私有变量__age呢?
使用方法来访问

私有变量的本质:
类定义的时候,如果声明一个实例变量的时候,使用双下划线,Python解释器会将其改名,转换名称为_类名__变
量名的名称,所以用原来的名字访问不到了。

class Person:
	def __init__(self,name,age=18):
		selfname=name
		self.__age=age
	def growup(self,i=1):
		if i> 0 and i < 150:#控制逻辑
			self.__age+=i
	def getage(self):
		return self.__age
p1=Person('tom')
p1.growup(20)#正常的范围
#print(p1.__age) #访问不到
p1.__age=28
print(p1.__age)
print(p1.getage())
#为什么年龄不一样?__age没有覆盖吗?
print(p1.__dict__)
#直接修改私有变量
p1._Person__age=15
print(p1.getage())
print(p1.__dict__)


从上例可以看出,知道了私有变量的新名称,就可以直接从外部访问到,并可以修改它。

保护变量:在变量名前使用一个下划线,称为 保护变量

class Person:
	def __init__(self,name,age=18):
		self name = name
		self._age = age
tom=Person('Tom')
print(tom._age)
print(tom.__dict__)

可以看出,这个_age属性根本就没有改变名称,和普通的属性一样,解释器不做任何特殊处理。
这只是开发者共同的约定,看见这种变量,就如同私有变量,不要直接使用。

私有方法:参照保护变量,私有变量使用单下划线,双下划线命名方法

单下划线的方法只是开发者之间的约定,解释器不做任何改变。
双下划线的方法,是私有方法,解释器会改名,改名策略和私有变量相同,_类名__方法名。
方法变量都在类的__dict__中可以找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值