python中__getattr__和__setattr__】的更多相关文章

代码: #!/usr/bin/env python #! -*- coding:utf-8 -*- class A(object): def __setattr__(self, key, value): self.__dict__[key] = value def __getattr__(self, name): return "xxx" obj = A() 执行操作的代码: 代码1: print(obj.__dict__) 结果: {} # 空字典 代码2: print(obj.na…
一. 引言 前面几节分别介绍了Python中属性操作捕获的三剑客:__ getattribute__方法.__setattr__方法.__delattr__方法,为什么__ getattribute__方法与后两者的命名规则会不同呢?为什么属性读取的方法不是__ getattr__方法呢?这是因为Python中__ getattr__方法别有用途. 二. __getattr__与__getattribute__关系 __getattr__是Python中的内置函数,该函数可以在实例的属性查看时出…
__getattr__与__getattribute__均是一般实例属性截取函数(generic instance attribute interception method),其中,__getattr__可以用在python的所有版本中,而__getattribute__只可以用到新类型类中(New-style class),其主要的区别是__getattr__只截取类中未定义的属性,而__getattribute__可以截取所有属性,下面用代码进行说明: (1)__getattr__ cla…
python class 通过内置成员dict 存储成员信息(字典) 首先用一个简单的例子看一下dict 的用法 class A(): def __init__(self,a,b): self.a = a self.b = b def f(self): print (self.__dict__) a = A(1,2) a.f() 输出结果:{‘b’: 2, ‘a’: 1} 我们可以通过重载getattr和setattr来拦截对成员的访问或者作出一些自己希望的行为getattr 在访问对象访问类中…
Python class 通过内置成员__dict__ 存储成员信息(字典) 首先用一个简单的例子看一下__dict__ 的用法 class A(): def __init__(self,ax,bx): self.a = ax self.b = bx def f(self): print (self.__dict__) a = A(1,2) a.f() 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 输出结果:{‘b’: 2, ‘a’: 1} 利用__dict__ 可以达到一些简…
自己定义了这些attr 查找删除设置就会触发自己定义的逻辑,如果不重新,pyton会提供自己报错信息class Room: def __init__(self,name): self.name = name def big_room(self): print('bigroot') def __getattr__(self, item): print('调用一个不存的对象属性时候,执行',item) def __delattr__(self, item): print('删除一个属性时候,执行',…
学好和用好python, descriptor是必须跨越过去的一个点,现在虽然Python书籍花样百出,但是似乎都是在介绍一些Python库而已,对Python语言本身的关注很少,或者即使关注了,但是能够介绍把 dscriptor介绍清楚的,是很少的,到目前,我自己还没有见到过. 一个attr能被称为descriptor,除了需要定义 descriptor protocol 规定的方法外,这个attr必须是属于某个class的,不能是属于某个instance 一.Python中的descript…
Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).property内置函数(有时又称“特性”)和描述符协议 (descriptor). 在Python中,类和类实例都可以有属性:Python中类的属性相当于C++中类的静态成员,而类实例的属性相当于C++中类的非静态成员.可以简单地这么理解. 1 操作符重载 在Python中,重载__getattr_…
首先看下面的代码: # coding: utf-8 class Test(object): pass print Test.__class__ # type print Test.__base__ # object t = Test() print t.__class__ # Test print t.__class__.__class__ # type print Test.__class__.__class__.__class__ # type a = type('Foo', (), {})…
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(new-style class) 2.3.1 __init__方法 2.3.2 __new__静态方法 2.4. 新式类的实例 2.4.1 Property 2.4.2 __slots__属性 2.4.3 __getattribute__方法 2.4.4 实例的方法 2.5 新的对象模型 2.5.1…