属性查找的总结
下面是对属性访问的完整总结,有点长
当从对象获取属性时 (print objectname.attrname) 遵循以下步骤:
1.如果attrname是对象的特殊属性 (如python提供的) , 直接返回它.
2.在objectname.__class__.__dict__中查找attrname. 如果存在并且是个data-descriptor, 返回这个descriptor的结果.(如果没找到的话)需要查找objectname.__class__的所有基类执行同一过程.
3.在objectname.__dict__中查找attrname, 如果找到就返回. 如果objectname是class, 也要查找它的基类们. 如果它是个class并且它或者它的基类里头有descriptor, 返回descriptor的结果.
4.在objectname.__class__.__dict__中查找attrname. 如果存在并且是个non-data descriptor, 返回这个descriptor的结果. 若存在但不是descriptor, 就直接返回它. 若存在且是data descriptor, 不会有这种情况,如果这样的话,第二步我们就返回了. 查找objectname.__class__的所有基类执行同一过程.
5.抛出 AttributeError
注意python先再对象的类或者基类中找data descriptor,然后在对象的__dict__中找属性,再然后在对象的类或基类中找non-data descriptor。即上面第2,3,4步描述的。
上面说到的descriptor的结果是指用合适的参数调用descriptor的 __get__()方法得到的结果。从__dict__中找attrname意思是检查__dict__["attrname"]是否存在
下面是python设置用户属性(objectname.attrname = something)时的步骤:
1.在objectname.__class__.__dict__中找attrname. 如果存在且是data-descriptor, 使用这个descriptor设置值. 查找objectname.__class__的所有基类执行同一过程.
2.在objectname.__dict__中插入一项。key为"attrname",value为something.
3.ok,多简单.
当设置一个python提供的属性时所需要的步骤要视具体的属性而定。python甚至不允许设置某些属性。. 删除属性的步骤和上述设置属性很类似。
原文http://www.cafepy.com/article/python_attributes_and_methods/ch01s05.html
分享到:
相关推荐
首先,标题和描述中提到的"Adversarial Attribute-Text Embedding for Person Search with Natural Language Query"指的是使用对抗属性-文本嵌入技术来实现基于自然语言查询的人搜索功能。在这里,“对抗”指的是...
在.NET框架中,Attribute是一种元数据,用于向编译器、IDE、运行时环境等提供额外的信息。这些信息可以用来修饰类、接口、方法、属性等各种编程元素,从而实现特定的功能或扩展。AOP(面向切面编程)是一种编程范式...
C#的Attribute是一种元数据,它允许我们向代码添加额外的信息,这些信息可以在编译时或运行时被程序集、编译器、反射或其他工具使用。Attribute不是代码的一部分,它们不直接影响程序的执行,但提供了方便的方式来...
### __attribute__ 在 C 语言中的使用方法 #### 一、引言 在 C 语言中,`__attribute__` 是 GNU 编译器集合 (GCC) 的一个扩展特性,它允许开发人员向函数、变量或类型添加元数据,从而增强编译时的错误检查能力并...
AttributeError: module 'tensorflow.compat.v1' has no attribute 'contrib'的问题您具体怎么解决问题具体解决的seq_loss.py文件
Attribute标记属性在.NET框架中扮演着重要的角色,它是元数据的一部分,允许我们在代码中附加信息,这些信息在程序运行时可以被编译器、运行时或其他工具读取和使用。Attribute提供了一种灵活的方式来注解类、方法、...
在.NET框架中,属性(Attribute)是一种元数据,可以附加到程序元素,如类、方法、属性等,为编译器、运行时环境或其他工具提供额外的信息。它们是编程中的一个重要概念,允许开发者向代码中添加非执行性的描述性...
python3 server.py 127.0.0.1 8888 ...AttributeError: module ‘os’ has no attribute ‘exit’ 部分代码入下: from socket import * import sys,os #实现登录 def do_login(s,user,name,addr): for i in user: i
自定义attribute允许我们根据项目需求扩展默认的数据类型,例如,如果我们需要为每个顶点添加一个自定义的ID,我们可以创建一个新的attribute。 首先,我们将在顶点着色器中定义自定义attribute。例如,如果我们要...
### Attribute的作用和具体使用方法 随着信息技术的飞速发展,软件开发领域中各种技术与工具不断更新迭代。在Web开发中,属性(Attribute)作为一项基础而重要的功能,被广泛应用于处理用户请求、数据传递以及页面...
"Property和Attribute的区别" 在面向对象编程(Object-Oriented Programming)中,Property和Attribute都是常用的概念,但是它们之间存在着本质的区别。Property是指类向外提供的数据区域,是智能的字段,其中有get...
"attributeQuery.rar_AttributeQuery" 提供的资源是关于如何利用ArcGIS Engine (AE) 和C#编程语言实现一个特定类型的查询——框选要素并弹出其属性值的查询功能。这个功能对地图数据的分析和应用非常实用,尤其在...
在IT领域,文件属性(File Attribute)是操作系统用于标识和管理文件的重要机制。它提供了关于文件的基本信息,如隐藏、只读、系统、存档等状态。这些属性可以帮助用户和程序更好地控制文件的访问和存储。现在我们来...
### ASP.NET MVC5 新特性:Attribute路由使用详解 #### 一、Attribute路由简介与启用 在探讨Attribute路由之前,我们先来明确一下它的定义。**Attribute路由**是一种新的路由机制,它允许开发者直接在控制器的方法...
### Attribute详解:深入理解GCC属性 #### 概述 在Linux开发及GCC(GNU Compiler Collection)的使用过程中,深入理解`__attribute__`是至关重要的。`__attribute__`是GCC提供的一种特性,用于向编译器传递额外的...
Attribute在.NET编程中的应用是一个关键的概念,它允许程序员在代码中添加元数据,这些元数据可以为运行时环境提供额外的信息,或者影响程序的行为。在.NET框架中,Attribute不仅仅是一个关键字,而是一个类,它是...
C#的Attribute
Attribute在.NET中是一种元数据,可以附加到程序元素(如类、方法、属性等)上,提供额外的信息,通常用于运行时反射和自定义行为。 在Unity中,我们通常需要在容器中注册类型映射,然后在需要的地方通过依赖解析...
### Attribute在.NET编程中的应用详解 #### 一、Attribute概述 在.NET编程中,Attribute是一个极为重要的特性,它类似于Java中的注解。Attribute主要用于为.NET框架中的类型、字段、方法和属性等添加元数据信息。...