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中hasattr()、getattr()、setattr()函数的使用

     引言: 在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr().getattr().setattr()函数的使用也一并学习了一下. 正文: 1. hasattr(object, name) 判断object对象中是否存在name属性,当然对于python的对象而言,属性包含变量和方法:有则返回True,没有则返回False:需要注意的是name参数是string类型,所以不管是要判断变量还是方法,其名称都以字符串形式传

  • 详解Python魔法方法之描述符类

    描述符类要求: 描述符就是将某种特殊类型的类的实例指派给另一个类的属性 至少要实现以下的一个方法: •__get__(self, instance, owner) –用于访问属性,它返回属性的值 •__set__(self, instance, value) –将在属性分配操作中调用,不返回任何内容 •__delete__(self, instance) –控制删除操作,不返回任何内容 eg: >>> class MyDecriptor: def __get__(self,instanc

  • Python使用内置函数setattr设置对象的属性值

    英文文档: setattr(object, name, value) This is the counterpart of getattr(). The arguments are an object, a string and an arbitrary value. The string may name an existing attribute or a new attribute. The function assigns the value to the attribute, prov

  • 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常用的魔法方法

    一.python魔法方法 Python的魔法方法会在特定的情况下自动调用,且他们的方法名通常被双下划线包裹,之前我们学习的构造函数和析构函数就属于魔法方法 二.运算符重载 Python中同样有运算符重载,其实所有的运算符都是使用了对应的魔法方法来处理的对象的,魔法方法对应的操作符如下 我们来举一个简单的例子 class A: def __init__(self,x): self.x = x def __add__(self,other): return int(self.x)+int(other

  • 浅谈Python魔法方法

    特殊方法一览 在 Python 的学习和使用过程中, 你一定碰到过一些 特殊方法, 它们开头和结尾都有两条下划线, 也叫魔法方法 (Magic method), 或者 Dunder method (double under method). 例如: >>> dir(int) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__len__', '__delattr__', '__dir__', '__divmod__',

  • python魔法方法之__setattr__()

    目录 前言: 1.实例属性管理__dict__ 2.__setattr__()与__dict__ 3.重载__setattr__()必须谨慎 总结: 前言: python提供了诸多的魔法方法,其中__setattr__()方法主要用于类实例进行属性赋值,其定义在Object类官方提供的说明如下: Called when an attribute assignment is attempted. This is called instead of the normal mechanism (i.e

  • 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的setattr函数实例用法

    现在小编已经学习语言程序良久,但是在了解以后,如果让小编再去学习语言要入手入口,一定是先从掌握函数开始了解,原因很简单,任何一个代码串都是有函数构成的,这就好比我们在打游戏的时候,先掌握"w"."Q"键一样,这样才能灵活运用整个程序的良好运转.又给大家带来一个好用的函数--setattr. 步骤1.描述 setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在. 步骤2.setattr 语法 setattr(object, name, valu

  • 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实现创建模块的方法详解

    目录 楔子 __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中是

随机推荐