python的访问限制

访问限制

>>> class Student(object):

	def __init__(self, name, age):
		self.name = name
		self.age = age

		
>>> Nelson = Student('Nelsonsang', 24)
>>> Nelson.age = 40
>>> Nelson.age
40

从上例所示,外部代码可以自由地修改实例的属性数据。

若想让内部数据不被外部访问,可以再属性名称前加两个下划线__,这样就变成了一个私有变量(private),内部可以访问,外部不能访问,若需要获得属性数据,在类别自定义中增加get_name类似方法,也可通过set_age等方法来修改属性数据,例如:

>>> class Student(object):

	def __init__(self, name, age, score = 90):
		self.__name = name
		self.__age = age
		self.__score = score
	def get_name(self):
		return self.__name
	def get_age(self):
		return self.__age
	def print_score(self):
		print('%s: %s' % (self.__name,self.__score))
	def set_age(self, age):
		if age >= 1 and age <=100:
			self.__age = age
		else:
			raise ValueError('bad score')

		
>>> Nelson = Student('Nelsonsang', 24)
>>> 
>>> Nelson.set_age(30)
>>> Nelson.get_age
<bound method Student.get_age of <__main__.Student object at 0x0231EDB0>>
>>> Nelson.get_age()
30
>>> Nelson._Student__name
'Nelsonsang'

还存在如下变量名:

__XXX__,前后都有两个下划线的变量,这种变量属于特殊变量,是可以直接访问的,不是private变量;

_XXX,这样的变量外部是可以访问的,但是按照约定俗成的规定,当看到这样的变量,意思就是:“虽然我可以被访问,但请把我视为私有变量,不要随意访问。”

双下划线开头的实例变量也可以从外部访问,是因为python解释器将__XXX变为了_XXX__XXX,所以可以使用_XXX__XXX来访问__XXX变量。(建议不要这样做,因为不同的python解释器可能会把__XXX改成不同的变量名)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中有访问权限的概念,可以通过使用双下划线(__)来定义私有属性和私有方法。私有属性和私有方法只能在类内部访问,无法在类外部直接访问。当我们尝试在类外部访问私有属性或私有方法时,会出现AttributeError的错误提示,如引用[1]所示。 然而,Python并没有严格的访问权限控制机制,因此仍然有一些方法可以访问私有属性和私有方法。其中,常用的方法有两种: 1. 为类增加一个公共方法来访问私有属性或私有方法。这是一种推荐的方法,通过在类中定义公共方法来访问私有属性或私有方法。在公共方法内部,可以直接访问私有属性或私有方法。这样,在类外部就可以通过调用公共方法来间接地访问私有属性或私有方法。这种方法可以保持封装性和安全性,如引用[2]所示。 2. 使用"实例名._类名__变量名"的方式来访问私有属性或私有方法。在Python中,私有属性或私有方法会被重命名,以避免与子类中的同名属性或方法冲突。私有属性或私有方法的名称会被改为"_类名__变量名"的形式。通过使用这种方式,可以在类外部直接访问私有属性或私有方法。但是需要注意的是,这种方式不被推荐使用,因为它违背了封装的原则,破坏了类的封装性,如引用[3]所示。 总结起来,Python中的访问权限可以通过定义私有属性和私有方法来实现。虽然无法直接在类外部访问私有属性和私有方法,但可以通过增加公共方法或使用特定的命名规则来间接或直接访问私有属性和私有方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值