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):
        try:
            return object.__getattribute__(name)
        except:
            return name + ' is not found!'
    def __str__(self):
        return self.name + ' cost : ' + str(self.value)

c = Book()
c.name = 'Python'
c.value = 100
print c.name
print c.value
print c
print c.Type

上面的例子中,在赋值书的value属性时,偷偷的将value减去了100,呵。输出结果:

Python
0
Python cost : 0
Type is not found!

(0)

相关推荐

  • 浅析Python中的getattr(),setattr(),delattr(),hasattr()

    getattr()函数是Python自省的核心函数,具体使用大体如下: 获取对象引用getattr Getattr用于返回一个对象属性,或者方法 class A: def __init__(self): self.name = 'zhangjing' #self.age='' def method(self): print"method print" Instance = A() print getattr(Instance , 'name, 'not find') #如果Instan

  • python中getattr函数使用方法 getattr实现工厂模式

    看了下函数本身的doc 复制代码 代码如下: getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn't exist; without it, an exception i

  • Python中getattr函数和hasattr函数作用详解

    hasattr(object, name) 作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的). 示例: >>> hasattr(list, 'append') True >>> hasattr(list, 'add') False getattr(object,name,default): 作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其

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

    引子 假设我们有个类A,其中a是A的实例 a.x时发生了什么?属性的lookup顺序如下: 如果重载了__getattribute__,则调用. a.__dict__, 实例中是不允许有descriptor的,所以不会遇到descriptor A.__dict__, 也即a.__class__.__dict__ .如果遇到了descriptor,优先调用descriptor. 沿着继承链搜索父类.搜索a.__class__.__bases__中的所有__dict__. 如果有多重继承且是菱形继承

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

    相信大家觉得大多数时候我们并不太需要关注getattribute和getattr的一些细节(至少我自己吧:)), 一般情况下消费我们自定义的类的时候,我们对类的结构都了解,不会刻意偏离,造成一些属性访问的错误. 不过作为一个有好奇心有追求有气质的python宝宝,怎么可能不稍稍研究一下呢.好吧,其实是在github上读到一个开源项目sinaweibopy的源码才看的,代码挺有意思,正好当作一个实用的例子,来看看如何自定义实现gettattr让代码更加的动态优雅: # 例子在原来的基础上简化了一下

  • 全面了解Python的getattr(),setattr(),delattr(),hasattr()

    1. getattr()函数是Python自省的核心函数,具体使用大体如下: class A: def __init__(self): self.name = 'zhangjing' #self.age='24' def method(self): print"method print" Instance = A() print getattr(Instance , 'name, 'not find') #如果Instance 对象中有属性name则打印self.name的值,否则打印

  • Python __setattr__、 __getattr__、 __delattr__、__call__用法示例

    getattr `getattr`函数属于内建函数,可以通过函数名称获取 复制代码 代码如下: value = obj.attribute value = getattr(obj, "attribute") 使用`getattr`来实现工厂模式 复制代码 代码如下: #一个模块支持html.text.xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出 import statsout def output(data, format="tex

  • 浅谈python中的getattr函数 hasattr函数

    hasattr(object, name) 作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的). 示例: >>> hasattr(list, 'append') True >>> hasattr(list, 'add') False getattr(object,name,default): 作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其

  • python中的内置函数getattr()介绍及示例

    在python的官方文档中:getattr()的解释如下: getattr(object, name[, default]) Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object's attributes, the result is the value of that attribute. For examp

  • 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  __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基础入门之魔法方法与异常处理

    目录 一.魔法方法 1.属性访问 2.描述符 3.定制序列 5.生成器 二.异常处理 1.异常类型 2.try-except 语句 3.try-finally 语句 4.raise 语句 5.丰富的else语句 总结 一.魔法方法 1.属性访问 通常可以通过点(.)操作符的形式去访问对象的属性. class C: def __init__(self): self.x='X-man' c=C() c.x 'X-man' getattr(c , 'x' , '木有这个属性') 'X-man' get

  • Python实现创建模块的方法详解

    目录 楔子 __import__ importlib.machinery 通过 module 类创建模块 将一个类的实例变成一个模块 小结 楔子 导入一个模块,我们一般都会使用 import 关键字,但有些场景下 import 难以满足我们的需要.所以除了 import 之外还有很多其它导入模块的方式,下面就来介绍一下. __import__ 这是一个内置函数,解释器在 import 的时候,实际上就执行了这个函数. # import os 等价于如下方式 os = __import__("os

  • 一文带你了解Python中的双下方法

    目录 前言 1. init方法 2. 运算符的双下方法 2.1 比较运算符 2.2 算术运算符 2.3 反向算术运算符 2.4 增量赋值运算符 2.4 位运算符 3.字符串表示 4.数值转换 5.集合相关的双下方法 6.迭代相关的双下方法 7.类相关的双下方法 7.1 实例的创建和销毁 7.2 属性管理 7.3 属性描述符 8.总结 前言 大家在写 Python 代码的时候有没有这样的疑问. 为什么数学中的+号,在字符串运算中却变成拼接功能,如'ab' + 'cd'结果为abcd:而*号变成了重

  • Python中的对象,方法,类,实例,函数用法分析

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. 复制代码 代码如下: class Foo(object):     static_attr = True     def method(self):         pass foo = Foo() 这段代码实际上创造了两个对象,Foo和foo.而Foo同时又是一个类,foo是这个类的实例. 在C++里类型定义是在编

  • Python 私有属性和私有方法应用场景分析

    类的私有属性和方法 Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有. Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以"__" 属性名或方法名以双下划线开头. class Test(object): __count = 0 # 私有属性 __count def get_count(self): return se

  • Python加速程序运行的方法

    问题 你的程序运行太慢,你想在不使用复杂技术比如C扩展或JIT编译器的情况下加快程序运行速度. 解决方案 关于程序优化的第一个准则是"不要优化",第二个准则是"不要优化那些无关紧要的部分". 如果你的程序运行缓慢,首先你得使用14.13小节的技术先对它进行性能测试找到问题所在. 通常来讲你会发现你得程序在少数几个热点位置花费了大量时间, 比如内存的数据处理循环.一旦你定位到这些点,你就可以使用下面这些实用技术来加速程序运行. 使用函数 很多程序员刚开始会使用Pyth

  • Python 中enum的使用方法总结

    前言: 枚举(enumeration)在许多编程语言中常被表示为一种基础的数据结构使用,枚举帮助组织一系列密切相关的成员到同一个群组机制下,一般各种离散的属性都可以用枚举的数据结构定义,比如颜色.季节.国家.时间单位等在Python中没有内置的枚举方法,起初模仿实现枚举属性的方式是 class Directions:     NORTH = 1     EAST = 2     SOUTH = 3     WEST = 4 使用成员: Direction.EAST Direction.SOUTH

  • Python定制类你不知道的魔术方法

    目录 Python中的魔法方法 1.__str__ 2.__iter__ 3.__getitem__ 4.__getattr__ 5.__call__ Python中的魔法方法 方法名 说明 __str__ 用于返回对象的描述 __iter__ 使类可以迭代 __getitem__ 按照下标获取类元素,例如list __getattr__ 调用类不存在的属性 __call__ 类实例化默认调用方法 看到类似 __slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是

随机推荐