类的隐藏与封装

封装是面向对象的三大特征之一, 它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。对一个类或对象实现良好的封装,可以达到以下目的:
1、隐藏类的实现细节,即隐藏类中的变量、方法及具体实现等;
2、只能通过事先预定的方法来访问,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问;
3、可进行数据检查,从而有利于保证对象信息的完整性;
4、便于修改,提高代码的可维护性。
总之实现一个良好的类封装,需要将类属性及实现细节隐藏起来,避免外部直接访问;通过提供可访问的具体方法让方法来控制对这些属性进行安全的访问和操作。

class User:
	#隐藏方法
	def __hide(self):
		print(self.__name, self.__age)
	
	#隐藏属性__name的getter和setter方法
	def getname(self):
		return self.__name
	def setname(self, name):
		if len(name) < 3 or len(name) > 8:
			raise ValueError('名称请控制在3-8个字符')
		self.__name = name
	name = property(getname, setname)

	#隐藏属性__age的getter和setter方法
	def getage(self):
		return self.__age
	def setage(self, age):
		if age < 18 or age > 45:
			raise ValueError('年龄需要在18至45岁之间')
		self.__age = age
	age = property(getage, setage)

u = User()
u.name = 'Andy'#实际上调用了setname方法进行赋值
u.age = 30 #同样调用setage方法
print(u.name, u.age)
#u.__hide() #尝试调用隐藏方法会提示未知属性错误

#可以通过绕开隐藏的方式访问
#u._User__hide()
#print(u._User__name, u._User__age)

Python并不是真正的隐藏,只是用过双下划线的方式实现简单的隐藏,可以通过单下划线加类名再加双下划线隐藏属性的方式直接访问和修改(例如上面的name属性,可以直接u._User__name进行访问,但不推荐这样使用)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值