`
shake863
  • 浏览: 664523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

getattribute getattr

 
阅读更多

class D(object):
   
    def __init__(self):
        self.default = 0.0
        self.test = 20
        self.test2 = 21
       
    def __getattribute__(self, name):
        try:
            if name == "test":
                print ("__getattribute__ name = %s" % name)
                return self.test        #This will default call same function "__getattribute__", can fix by object
            else:
                print ("__getattribute__ name = %s" % name)
                return object.__getattribute__(self, name)
        except AttributeError:
            print "getattribute error"
            raise
       
    def __getattr__(self, name):
        print ("__getattr__ name = %s" % name)
        print ("self.default=%s" % self.default)
        return self.default
   
if __name__ == "__main__":
   
    d = D()
    #print d.test       #This will caused recurison error because it call the same function, your getattribute
    print d.test2
    print d.ts           #When "__getattribute__" raise error, it will call in "__getattr__".

分享到:
评论

相关推荐

    详解Python中 __get__和__getattr__和__getattribute__的区别

    ### 详解 Python 中 `__get__` 和 `__getattr__` 与 `__getattribute__` 的区别 在 Python 编程语言中,对象的属性访问机制是非常灵活且强大的。当我们试图通过点号(`.`)操作符去访问一个对象的属性时,Python 会...

    对比Python中__getattr__和 __getattribute__获取属性的用法

    在Python中,`__getattr__` 和 `__getattribute__` 都是用来处理对象属性访问的特殊方法,但它们在何时以及如何被调用上有显著的区别。了解这些区别对于编写更灵活、更具动态特性的代码至关重要。 首先,`__getattr...

    浅谈 Python 魔法函数 __getattr__ 与 __getattribute__

    在Python编程语言中,有一些特殊的内置方法被称为“魔法函数”(Magic Methods),它们通常以两个下划线开头和结尾,例如`__getattr__`和`__getattribute__`。这两个魔法函数都涉及到对象属性的访问,但它们在处理不...

    Python __getattr__与__setattr__使用方法

    class Book(object): def __setattr__(self, name, value): if name == ‘value’: object.__setattr__(self, name, value – 100) else: object.__setattr__(self, name, value) def __getattr__(self, name)...

    Python中几种属性访问的区别与用法详解

    本文将深入探讨Python中几种属性访问方式的区别和用法,包括常规的点号访问、特殊方法`__getattr__`、`__getattribute__`、`__get__`以及`__getitem__`。 1. 常规属性访问: 当我们使用点号`.`来访问一个对象的...

    IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性

    在IE6和IE7中,尽管`getAttribute('class')`可以正确地获取设置的类名,但使用`setAttribute('class', 'abc')`却无法更改元素的样式。这意味着在这些旧版本的IE中,添加样式类需要采用其他方法,例如直接修改`...

    python3.7

    7. **`__getattr__`和`__dir__`的改进**:对于`__getattr__`,如果找不到属性,会先调用`__getattr__`,再尝试`__getattribute__`。`__dir__`现在会包含`__getattr__`可能返回的属性名。 8. **`os.replace()`和`os....

    Python面向对象魔法方法和单例模块代码实例

    需要注意的是,如果`__getattribute__`也被定义,那么`__getattr__`可能不会被调用,因为`__getattribute__`总是先于`__getattr__`执行。 4. `__getattribute__`: 对于任何对象的属性访问,无论属性是否存在,都会...

    Python中反射和描述器总结

    为了防止递归调用,`__getattribute__()`通常会调用`object.__getattribute__(self, name)`。 魔术方法`__getattr__()`、`__setattr__()`和`__delattr__()`构成了反射的核心,它们控制着对象属性的查找、赋值和删除...

    Invoke_objects_by_string.zip_invoke_objects

    在Python中,我们可以使用内置的`getattr()`函数或`__getattribute__()`方法来根据字符串获取对象的属性,然后通过`*args`和`**kwargs`传递参数,实现动态调用方法。例如: ```python class Employee: def work...

    英文:A链接标记ie下会自动补全href

    在开发Ajax Link Tracker和MapSurface时,我发现了一个关于如何通过DOM ...这可能意味着需要检查浏览器类型并适当地使用`getAttribute`的第二个参数,或者使用其他方法(如`getAttributeNode`)来获取原始的属性值。

    python特殊函数

    - `__getattr__`: 当尝试获取不存在的属性时调用。 - `__setattr__`: 设置属性时调用。 - `__delattr__`: 删除属性时调用。 - **格式**: - `def __getattr__(self, attr):` - `def __setattr__(self, attr, ...

    JavaScript_DOM编程—新版学习笔记.txt

    - 定义一个自定义函数 `getAttr()` 来获取正确的属性值。 - **示例**: ```javascript var specialNames = { 'class': 'className', 'for': 'htmlFor' }; function getAttr(node, attrName) { var attr = ...

    JS中使用DOM来控制HTML元素

    这样,我们就可以在两个函数`getAttr1()`和`getAttr2()`中分别弹出对应的属性值。 4. **setAttribute()**:与`getAttribute()`相对应,`setAttribute()`用于设置元素的属性值。在示例中,我们找到了ID为"aid2"的`...

    Python类特性描述

    - **`__getattribute__()`**:访问任何属性时都会被调用,如果同时定义了 `__getattr__`,那么只有当 `__getattribute__` 抛出 `AttributeError` 异常时,才会调用 `__getattr__`。 - **`__get__()`** 和 **`__set__...

    这8种 Python 加速运行技巧真棒.docx

    (属性访问操作符)会触发特定的方法,如 getattribute() 和 getattr() ,这些方法会进行字典操作,因此会带来额外的时间开销。通过 from import 语句,可以消除属性访问。局部变量的查找会比全局变量更快,因此...

Global site tag (gtag.js) - Google Analytics