Python 面向对象 描述器

【UE5.3 Cesium for Unreal】GlobePawn编译实战:从源码修改到功能实现 本文详细介绍了在UE5.3中为Cesium for Unreal插件编译和集成非官方增强组件GlobePawn的完整实战流程。从获取源码、准备资产文件、部署项目结构,到逐行修改代码适配工程并解决典型编译错误,最终实现在三维地球上实现类似Google Earth的丝滑鼠标交互体验。 阅读详情

概念

可以描述一个属性操作的对象

定义

定义方式1 property

class Person():
    def __init__(self):
        self.__age = 10
    
    def get_age(self):
        return self.__age
    
    def set_age(self, value):
        if value < 0:
            value = 0
        self.__age = value

    def del_age(self):
        del self.__age
    
    age = property(get_age, set_age, del_age)


p = Person()
# p.set_age(-10)
# print(p.get_age())

p.age = 19
print(p.age)
del p.age

19

定义方式2

class Age():
    def __get__(self, instance, owner):
        print('get')
    
    def __set__(self, instance, value):
        print('set')
    
    def __delete__(self, instance):
        print('delete')

class Person():
    age = Age()


p = Person()
p.age = 19
print(p.age)
del p.age

set
get
None
delete

调用细节

使用实例进行调用。
只在新式类有效,在经典类不生效。

方法拦截

  • 一个实例属性的正常访问顺序:
  • 实例对象自身的 __dict__ 字典
  • 对应类对象的 __dict__ 字典
  • 如果有父类,会再往上层的 __dict__ 字典中检测
  • 如果没找到,又定义了 __getattr__ 方法,就会调用这个方法

将描述器的__get__方法给嵌入到查找机制当中,就是通过__getattribute__ 来实现

调用优先级

资料描述器:实现了 get set
非资料描述器:仅实现了 get
优先级:资料描述器 > 实例属性 > 非资料描述器

class Age():
    def __get__(self, instance, owner):
        print('get')
    
    # def __set__(self, instance, value):
    #     print('set')
    
    # def __delete__(self, instance):
    #     print('delete')

class Person():
    age = Age()

    def __init__(self):
        self.age = 10


p = Person()
p.age = 19
print(p.age)

print(p.__dict__)

19
{‘age’: 19}

数据存储问题

class Age():
    def __get__(self, instance, owner):
        print('get')
        return instance.v
    
    def __set__(self, instance, value):
        print('set', self, instance, value)
        instance.v = value
    
    def __delete__(self, instance):
        print('delete')
        del instance.v

class Person():
    age = Age()


p = Person()
p.age = 19

p2 = Person()
p2.age = 11

print(p.age)
print(p2.age)

set <main.Age object at 0x03855990> <main.Person object at 0x04259850> 19
set <main.Age object at 0x03855990> <main.Person object at 0x04259DD0> 11
get
19
get
11

从代码仓库到知识库:自动化构建与RAG技术实践 在软件工程领域,代码库的规模与复杂性日益增长,如何高效管理和利用其中的知识成为关键挑战。传统文档工具主要依赖注释提取API信息,而现代知识构建技术则通过抽象语法树(AST)解析、自然语言处理等手段,深入理解代码结构、调用关系和业务逻辑。其核心价值在于将非结构化代码转化为机器可理解、可检索的结构化知识,显著提升代码资产的可维护性和团队协作效率。这一过程通常涉及代码解析、信息提取、向量化表示和存储索引四个关键阶段,其中向量化技术将代码语义转化为高维向量,为语义搜索奠定基础。结合检索增强生成(RAG)架构,开发者 阅读详情

相关推荐

保姆级教程:用SNAP处理哨兵一号数据,5步搞定城区范围提取(附江西晋城案例)

本文提供了一份详细的保姆级教程,介绍如何使用SNAP软件处理哨兵一号数据,通过5个关键步骤快速提取城区范围。以江西晋城为例,教程涵盖数据准备、预处理、核心处理流程、自动化搭建及成果分析,帮助用户轻松掌握SNAP操作技巧,适用于城市规划、环境监测等领域。

weixin_32535389的博客 454

Python进阶教程,python的描述器descriptor详解。

这篇文章主要介绍了python的描述器descriptor详解,描述器可以用于控制属性的读取、写入和删除等操作,同时还可以用于实现计算属性、类属性、属性别名等高级功能,需要的朋友可以参考下。

2301_80240808的博客 302

Vue3实战:企业级应用集成钉钉扫码登录全流程解析

本文详细解析了在Vue3企业级应用中集成钉钉扫码登录的全流程。从钉钉开放平台应用创建与配置,到Vue3前端如何优雅地嵌入并管理扫码组件,再到后端如何安全地处理OAuth 2.0授权码以换取用户信息并完成登录,提供了完整的实战代码与避坑指南。该方案能有效实现安全便捷的单点登录,统一企业身份认证。

weixin_29019241的博客 289

面向对象编程——描述器

在解释什么是「描述符」之前,我们先来看一个简单的例子。class A:x = 10这个例子非常简单,我们在类A中定义了一个类属性x,然后打印它的值。class Ten:return 10class A:x = Ten() # 属性换成了一个类仔细看,这次类属性x不再是一个具体的值,而是一个类Ten。Ten中定义了一个__get__方法,返回具体的值。在 Python 中,允许把一个类属性,托管给一个类,这个属性就是一个「描述符」。换句话说,「描述符」是一个「绑定行为」的属性。

m0_59247951的博客 177

NIDS——suricata(一)

NIDS——suricata环境安装和规则编写

weixin_58666006的博客 1273

从mseed到SAC格式转换全攻略:mseed2sac工具安装与批量处理技巧

本文详细介绍了如何将mseed格式的地震数据高效转换为SAC格式,涵盖mseed2sac工具的安装、单文件转换技巧、批量处理自动化实现以及元数据高级处理策略。通过具体命令和脚本示例,帮助地震学研究者快速掌握数据预处理的关键技术,提升波形数据分析效率。

ruby5的博客 927

021-Python面向对象-描述器、装饰器

话不多说,上代码,看结果。 print('2.6.1.7、描述器##############################') # 概念 可以描述一个属性操作的对象 # 属性的操作 增/改 删 查 # 作用 # 可以代为管理一个类属性的读写删操作, 在相关方法中, 对数据进行验证处理, 过滤处理等等 # 如果一个类属性被定义为描述器,那么以后对这个类属性的操作(读写删), 都将由这个描述器代理 # 定义 # 定义方式1 property class Forest: def __in

weixin_48013634的博客 413

vue3 - 高德地图定位出错Get ipLocation failed.Geolocation permission denied.(info: “FAILED“ | status: 0)报错解决!

vue3,nuxt3,高德地图,定位,位置,报错,AMap.Geolocation,解决报当前定位失败,高德地图H5 定位失败报错,web网页网站,报错详细解决教程,Get ipLocation failed.Geolocation permission denied.,高德地图定位报错info: "FAILED",高德地图status: 0,已经是https了还是报错,确保了浏览器位置已经开了,手机定位也开了,没解决,H5页面在ios的浏览器上使用 高德地图 报当前定位失败Geolocation,移动端设

✅ 精选推荐文章 6771

Python面向对象之描述器理解

文章目录反射概述反射相关的函数和方法反射相关的魔术方法object.__getattr__(self, name)object.__getattribute__(self, name)object.__setattr__(self, name, value)object.__delattr__(self, name)描述器描述器介绍1.描述器定义2.实现描述器的方法3.数据描述器和非数据描述器4....

ammmao的博客 558

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取F0-F3的状态,就会读出为1110,这就可 以知道是F3行拉低了,同时这时候是程序控制F4拉低的,这样就可以知道是F4列导致它转态变化了的,这样就可以定位出是F4列F3行的按键按下了;其他的列也是这样子扫描

lhh_qrsly的博客 7058

YOLOv11改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 853

object 的方法

Object.assign 方法实行的是浅拷贝,而不是深拷贝。 也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。 同名属性会替换 Object.create(parent, {z : { writable:true, configurable:true, value:“newAdd”} }) 使用指定的原型对象及其属性去创建一个新的对象 Object.defineP...

Sunny的博客 376

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python面向对象之描述器及“魔术”

面向对象在很多语言中都有,在Python中就有很多解释器留下的接口供程序员使用,具体内容看下文。 __ getitem __:获取容器中的某个值。 __ setitem __:给容器中设置某个值。 __ missing __:当容器中key值不存在时。 当在类中写了getitem和setitem方法时,给类的对象赋值时就可以像用字典那样赋值或读取数据了。missing方法主要就是当key值不存在时...

Oliver______的博客 218

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python面向对象编程 —— 描述器讲解

篇幅较长,绝对干货

kami_ochin_akane的博客 326

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python面向对象之描述器

描述器Descriptors 描述器的表现 描述器需要用到三个魔术方法:get(),set(),delete()。 方法签名如下: object.get(self,instance,owner) object.set(self,instance,owner) object.delete(self,instance) self指代当前实例,调用者 instance是owner的实例 owner是属...

都枯槐的博客 359

python学习之 ---面向对象高级进阶+魔术方法+描述器

面向对象高级 附上面向对象所以知识的思维图: 特殊属性 含义 _name_ 类,函数,方法等的名字 _class_ 对象的类型 type (type(ClassName)) 相当于 ClassName._type_ __dict__★★★★ 对象属性的字典 _qualname_ 类的限定名 _bases_ 类的基类的元组,顺序为他们在基类列表中出现的顺序 ...

等风来的博客 358

python描述器 触发事件_Python面向对象 - 描述器

描述器什么是描述器?描述器是干什么用的?现在有一个Person类来表示人。其中有两个属性,体重weight和身高height。我们都知道,人体的身高和体重的数据是变化的,但不管怎么变,都不可能是小于0。因此对于Person的使用者,我们希望在设置Person类的weight和hight的时候,可以避免将它们设置为负数。试想一下,如果这两个属性,就是普通的属性,那在类的外部就没有任何限制,也就是完全...

weixin_30362743的博客 141

python 描述器 详解_(转)面向对象(深入)|python描述器详解

# 类似函数的形式class A:def __init__(self, name, score):self.name = name # 普通属性self.score = scoredef getscore(self):return self._scoredef setscore(self, value):print('setting score here')if isinstance(value,...

weixin_39637723的博客 74

python面向对象—04-装饰器、描述器

python-04-装饰器、描述器 python 装饰器、描述器、常用内置装饰器 本节知识点 知识点一:装饰器 知识点二:描述器 知识点三:常用内置装饰器 一、part one 装饰器 装饰器是一个函数,一个用来包装函数的函数,装饰器在函数申明(不需要调用)完成的时候被调用,调用之后返回一个修改之后的函数对象,将其重新赋值原来的标识符,并永久丧失对原始函数对象的访问。对某个方法应...

俯κǎń迗倥 586

python | 面向对象 | 描述器

# encoding: utf-8# ************************************************描述器************************************************ # 定义:可以描述一个属性操作的对象(set, get, del)# ***********************************************

太尉司马懿的博客 204

python面向对象学习笔记8 - 描述器

描述器 通过修饰实现数据/格式检查 class Person: def __init__(self): self.__age = 10 def get_age(self): return self.__age def set_age(self, value): if value < 0: value = 0 self.__age = value def del_age(self): del self.__age age = property(get_ag

fa1c4的blog 158

(转)面向对象(深入)|python描述器详解

原文:https://zhuanlan.zhihu.com/p/32764345 # 类似函数的形式 class A: def __init__(self, name, score): self.name = name # 普通属性 self.score = score def getscore(self):...

weixin_30776863的博客 104

032.Python面向对象_类&补充_描述器

方法,此时,我们还不知道在这个方法中执行什么,所有先不实现任何操作,用占位关键字占位。缺点:每1个属性就需要定义3个方法来控制,那3个属性就需要9个方法,很繁琐!方法,但是并没有真正实现值的存储,那么我们来看一下如何实现值的传递和存储。三个方法,在这三个方法中有四个参数,我们来看一下这四个参数分别代表什么。哦豁,没有报错,运行成功了!方法中就可以接收到这个函数体,我们把这个函数体保存在实例属性中。同样的,最后把要增加的操作执行在调用这个函数体之前就行了。上面我们讲的这些案例中,仅仅只是实现了描述器中的。

weixin_50296259的博客 213

Python 面向对象(五) 描述器

使用到了__get__,__set__,__delete__中的任何一种方法的类就是描述器 描述器的定义 一个类实现了__get__,__set__,__delete__中任意一个,这个类就是描述器。 如果只实现了__get__,就叫非数据描述器non-data descriptor 如果同时实现了__get__,__set__,那就叫数据描述器data descripto...

weixin_30375427的博客 118

python描述器(Descriptor)

描述器(Descriptor也有人译为描述符) 任何定义了__get__(),__set__()或__delete__()方法的对象。当一个类属性为描述器时,它的特殊绑定行为就会在属性查找时被触发。通常情况下,使用a.b来获取、设置或删除一个属性时会在a的类字典中查找名称为b的对象,但如果b是一个描述器,则会调用对应的描述器方法。理解描述器的概念是更深层次理解 ...

cnds123的专栏 2313

python高级特性之二:描述器初探

前置认识 ''' 学习用python的高级特性2:描述器descriptor ''' # 1 example class Ten: def __get__(self, instance, owner): return 10 class A: x = 5 y = Ten() print(A.x, A.y) #描述器A.y和属性差别就是 直接调用了 __get__; 相当于每次.()引用属性就调用get, call方法? # 2 listdir, 统计数目的get

PerfeyCui的博客 198
上一篇: Python 面向对象 补充 方法相关
下一篇: Python 面向对象 装饰器
core571
博客等级 码龄12年 13粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值