类 __getitem__ __getattr__ __call__】的更多相关文章

__getitem__ 实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,要表现得像list那样按照下标取出元素,需要实现__getitem__()方法 __getattr__ 正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错.要避免这个错误,除了可以加上一个score属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性.修改如下: class Student(object): def __init_…
class F: def __init__(self, name): self.name = name def __getattr__(self, item): return '__getattr__' obj = F('tom')print(obj.name)print(obj.age) 当调用类中的属性时,如果类中有该属性就调用,如果没有,就调用__getattr__函数…
#__getattr__, __getattribute__ #__getattr__ 就是在查找不到属性的时候调用 from datetime import date class User: def __init__(self,info={}): self.info = info def __getattr__(self, item): return self.info[item] # def __getattribute__(self, item): #访问任何都会进入到这里 # retur…
class A: def __call__(self, *args, **kwargs): print('执行了call方法') def call(self): print('执行call方法') class B: def __init__(self,cls): print('在实例化A之前做一些事情') self.a=cls() self.a() print('在实例化A之后做一些事情') a=A() a()#对象()相当于调用__call__方法 #A()() 类名()(),相当于先实例化得…
本文根据廖雪峰的博客,学习整理笔记.主要内容有:基本数据类型,容器数据类型,变量及其作用域,判断及循环语法,函数式编程,面向对象,模块等概念. 数据类型 在python中,能够直接处理的数据类型有以下几种: 整数 浮点数 字符串 布尔值 空值 其他内置的数据类型: 列表 list 是一种有序的集合,例如 classmates = ['Michael', 'Bob', 'Tracy'] len() 获取个数 list[0] 取值 apend('tom') 追加元素到末尾 insert(1,'tom…
__getattr__ 在Python中,当我们试图访问一个不存在的属性的时候,会报出一个AttributeError.但是如何才能避免这一点呢?于是__getattr__便闪亮登场了 当访问一个不存在的属性的时候,会触发__getattr__方法 # -*- coding:utf-8 -*- # @Author: WanMingZhu # @Date: 2019/10/22 10:31 class A: def __init__(self): self.name = "satori"…
python2.x中的新类型类(New-style class)与python3.x的类一致,均继承object类,而不继承object的类称为经典类(classic class),而对于这两种类,一般实例属性截取函数(generic instance attribute interception methods)的行为有所不同,其在3.x和2.x的新类型类中,不再被__x__操作符重载函数名(operator overloading name)的内建操作调用,对于该操作符重载函数名的搜索直接在…
简单一句话,当一个类实现__call__方法时,这个类的实例就会变成可调用对象. 直接上测试代码 class ClassA: def __call__(self, *args, **kwargs): print('call ClassA instance') if __name__ == '__main__': # ClassA实现了__call__方法 a = ClassA() ''' 这个时候,ClassA的实例a,就变成可调用对象 调用a(),输出call ClassA instance,…
原始type: type是最原始的元类,其__call__方法是在你使用" t_class = type(classname_string, base_classes_tuple, attributes_dict)" 这种语法来使用时, 在__call__方法内使用又会调用type的__new__和__init__方法来创建classname_string的具体类,并初始化类信息.当type(***)调用完成, classname_string代表的类可以用来创建实例了. 元类调用过程…
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同. 创建实例是通过类名+()实现的 类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响: 方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据: 通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节. 和静态语…