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 编程语言中,对象的属性访问机制是非常灵活且强大的。当我们试图通过点号(`.`)操作符去访问一个对象的属性时,Python 会...
在Python中,`__getattr__` 和 `__getattribute__` 都是用来处理对象属性访问的特殊方法,但它们在何时以及如何被调用上有显著的区别。了解这些区别对于编写更灵活、更具动态特性的代码至关重要。 首先,`__getattr...
在Python编程语言中,有一些特殊的内置方法被称为“魔法函数”(Magic Methods),它们通常以两个下划线开头和结尾,例如`__getattr__`和`__getattribute__`。这两个魔法函数都涉及到对象属性的访问,但它们在处理不...
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中几种属性访问方式的区别和用法,包括常规的点号访问、特殊方法`__getattr__`、`__getattribute__`、`__get__`以及`__getitem__`。 1. 常规属性访问: 当我们使用点号`.`来访问一个对象的...
在IE6和IE7中,尽管`getAttribute('class')`可以正确地获取设置的类名,但使用`setAttribute('class', 'abc')`却无法更改元素的样式。这意味着在这些旧版本的IE中,添加样式类需要采用其他方法,例如直接修改`...
7. **`__getattr__`和`__dir__`的改进**:对于`__getattr__`,如果找不到属性,会先调用`__getattr__`,再尝试`__getattribute__`。`__dir__`现在会包含`__getattr__`可能返回的属性名。 8. **`os.replace()`和`os....
需要注意的是,如果`__getattribute__`也被定义,那么`__getattr__`可能不会被调用,因为`__getattribute__`总是先于`__getattr__`执行。 4. `__getattribute__`: 对于任何对象的属性访问,无论属性是否存在,都会...
为了防止递归调用,`__getattribute__()`通常会调用`object.__getattribute__(self, name)`。 魔术方法`__getattr__()`、`__setattr__()`和`__delattr__()`构成了反射的核心,它们控制着对象属性的查找、赋值和删除...
在Python中,我们可以使用内置的`getattr()`函数或`__getattribute__()`方法来根据字符串获取对象的属性,然后通过`*args`和`**kwargs`传递参数,实现动态调用方法。例如: ```python class Employee: def work...
在开发Ajax Link Tracker和MapSurface时,我发现了一个关于如何通过DOM ...这可能意味着需要检查浏览器类型并适当地使用`getAttribute`的第二个参数,或者使用其他方法(如`getAttributeNode`)来获取原始的属性值。
- `__getattr__`: 当尝试获取不存在的属性时调用。 - `__setattr__`: 设置属性时调用。 - `__delattr__`: 删除属性时调用。 - **格式**: - `def __getattr__(self, attr):` - `def __setattr__(self, attr, ...
- 定义一个自定义函数 `getAttr()` 来获取正确的属性值。 - **示例**: ```javascript var specialNames = { 'class': 'className', 'for': 'htmlFor' }; function getAttr(node, attrName) { var attr = ...
这样,我们就可以在两个函数`getAttr1()`和`getAttr2()`中分别弹出对应的属性值。 4. **setAttribute()**:与`getAttribute()`相对应,`setAttribute()`用于设置元素的属性值。在示例中,我们找到了ID为"aid2"的`...
- **`__getattribute__()`**:访问任何属性时都会被调用,如果同时定义了 `__getattr__`,那么只有当 `__getattribute__` 抛出 `AttributeError` 异常时,才会调用 `__getattr__`。 - **`__get__()`** 和 **`__set__...
(属性访问操作符)会触发特定的方法,如 getattribute() 和 getattr() ,这些方法会进行字典操作,因此会带来额外的时间开销。通过 from import 语句,可以消除属性访问。局部变量的查找会比全局变量更快,因此...