Python基础语法——图解Python面向对象描述符

本文介绍了Python面向对象中的描述符概念,它是一种特殊类,能够控制属性的访问。描述符通过`__get__`、`__set__`和`__delete__`方法实现属性的读取、设置和删除操作,类似于property()方法的功能。文章通过图解和代码实例详细阐述了描述符的工作原理和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python面向对象描述符

前言:
亲爱的小伙伴们,还记得python中人见人爱的property()方法吗?

在Python中,实例化对象访问类的属性可以通过【实例对象名.属性名】来访问。但是这样子的操作做破坏了面向对象的封装性!因此,Python一顿操作猛如虎,通过在类属性名前面加上双下划线,即为类属性设置私有访问权限,然后通过实例化对象调用getter(),setter()方法来间接访问这些私有属性。
然而,【实例对象名.属性名】的方式改为使用getter()、setter()方法将使代码变得更加复杂臃肿。因此诞生了人见人爱的property()方法!property()方法能够非常简洁、灵活地访问类的属性。那么property()方法的内部实现机制是什么呢?
——今天的主角:描述符

1.概念:在python,描述符是一个特殊的类。这个特殊的类可以将其实例对象指派给另一个普通类的属性。

2.特殊的类:包含一下方法任何一种:

__get __(self,instance,owner) 用于访问属性,返回属性的值

__set __(self,instance,value) 属性分配操作中调用,不返回任何内容

__delete __(self,instance) 控制删除操作,不返回任何内容

3.图解-定义描述符类的本质:
在这里插入图片描述
4.图解-描述符的应用-实现python中的property方法
在这里插入图片描述
代码实例:

>>> class Myproperty:#定义一个描述符类Myproperty
	def __init__(self,fget,fset,fdel):
		self.fget = fget
		self.fset = fset
		self.fdel = fdel
		
	def __get__(self,instance,owner):
            
		return self.fget(instance)

	
	def __set__(self,instance,value):
            
		self.fset(instance,value)
		
		
	def __del__(self,instance):
            
		self.fdel(instance)

>>> class C:
	def __init__(self):
            
		self._x = None
		
		
	def getX(self):
            
		return self._x

	    
	def setX(self,value):
            
		self._x = value
		
		
	def delX(self):
                del self._x
	
	x = Myproperty(getX,setX,delX) #描述符类实例化对象指派给普通类C的属性x

	
>>> c = C()

>>> c.x = 'X-MAN'

>>> c.x

'X-MAN'
>>> c._x
'X-MAN'
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值