python魔法函数__dict__和__getattr__的妙用 __dict__ __dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值. 既然__dict__是个字典那么我们就可以用字典的属性了. 我们通过使用dir()属性来看看__dict__都有哪些属性. ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '…
getattr 在访问对象的属性不存在时,调用__getattr__,如果没有定义该魔法函数会报错 class Test: def __init__(self, name, age): self.name = name self.age = age def __getattr__(self, item): print(item) // noattr return 'aa' test = Test('rain', 25) print(test.age) // 25 print(test.noatt…
python中定义的以__开头和结尾的的函数.可以随意定制类的特性.魔法函数定义好之后一般不需要我们自己去调用,而是解释器会自动帮我们调用. __getitem__(self, item) 将类编程一个可迭代的对象.对象元素为item内的元素. __len__(self,) 返回类的长度(如果没有改魔法函数就会报错) __repr__(self)  定义类在开发模式调用时出来的内容 __str__(self) 定义print(类)出来的状态,即将类字符串化 __add__(self, other…
魔法函数会增强python类的类型,独立存在 __getitem class Company: def __init__(self, employees): self.employees = employees def __getitem__(self, item): return self.employees[item] company = Company(['a', 'b', 'c']) for val in company: print(val) company1 = company[:2…
技术背景 本文主要涵盖两个领域的知识点:python的魔法函数和量子计算模拟,我们可以通过一个实际的案例来先审视一下这两个需求是如何被结合起来的. 量子计算模拟背景 ProjectQ是一个非常优雅的开源量子计算编程框架,其原作者是来自与瑞士联邦理工的博士Damian和Thomas.该量子计算编程框架是一个从量子计算应用->量子线路编译->哈密顿量模拟->量子计算模拟->量子硬件API对接都有相应实现的.非常全面的量子计算编程框架.其开源地址为:https://github.com/…
看了魔法函数,有一点疑问.1中需要用self.word才能执行,而2直接用self就可以执行.而1中Word继承了int基本类型,但在__new__时并没有什么卵用.当用 Word(“123”)来实例化时,看到的运算结果是以字符串形式来进行运算的,比如“123”*3=123123123. 1. class Word(int): def __new__(cls, word): word = int(word) return int.__new__(cls,word) def __init__(se…
#!/usr/bin/env python# -*- coding: utf-8 -*- class student: def __init__(self, name_list): self.student_name_list = name_list def __getitem__(self, item): return self.student_name_list[item] stu = student(['tom', 'bob', 'jane', ])stu = stu[:2]l = len…
__repr__和__str__都是python中的特殊方法,都是用来输出实例对象的,如果没有定义这两个方法在打印的时候只会输出实例所在的内存地址 这种方式的输出没有可读性,并不能直观的体现实例.python提供了__repr__和__str__这两种方法来改进,如下: 在第二个例子中第一次直接输出实例并没有返回str,只改变了print的输出,由此可见__repr__改变的是所有的输出,而__str__改变的是print输出,所以当我们没有重构__str__只重构了__repr__同样是可以使…
  #!/usr/bin/env python # -*- coding: utf-8 -*- import sys __metaclass__ = type """ __getattr__ 和 __getattribute__ 的区别 """ class ClassName: def __init__(self, name, info={}): self.name = name self.info = info # def __getattri…
多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以相应同一个方法,长身不同的结果) 好处:对于使用者而言,使用成本降低 ​ 之前的USB接口下的鼠标,键盘,就属于多态 接口抽象类 鸭子类型都可以写出具备多态的代码(最简单的就是鸭子类型) ''' 要管理 鸡 鸭 鹅 如何能够最方便的管理,就是我说同一句话,他们都能理解 他们拥有相同的方法 ''' clas…
简介 在实际项目中,我们其实并不会太多的使用魔法函数,但是一些方法或者函数均是有魔法函数演变而来的,且在一些面试过程中会遇到一些关于常见方法的实现,就会牵扯到相应的魔法函数,此处将介绍一些我认为比较常用的魔法函数. __new __.__init __ 类的构造函数,一般初始化传值使用 class Init(): def __init__(self, name): self.name = name def show_name(self): print(self.name) i = Init('t…
__repr__ Python中这个__repr__函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串.如果我们直接打印一个类,向下面这样 class A():    def __init__(self,name=None,id=1):        self.id=id        self.name=name if __name__ == '__main__':    a=A()    print(a) 输出结果 <__main__.A object at …
3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __init__(self, employee_list): self.employee = employee_list # 可迭代 def __getitem__(self, item): return self.employee[item] # 长度,实现了len函数 def __len__(self…
python 魔法方法补充 1 getattribute (print(ob.name) -- obj.func())当访问对象的属性或者是方法的时候触发 class F(object): def __init__(self): self.name = 'A' def hello(self): print('hello') def __getattribute__(self, item): print('获取属性,方法',item) return object.__getattribute__(…
python中有很多以下划线开头和结尾的特殊属性和魔法函数,它们有着很重要的作用. 1.__doc__:说明性文档和信息,python自建,不需要我们定义. # -*- coding:utf- -*- class Person: """这里是描述性信息""" def func(self): pass if __name__ == '__main__': print(Person.__doc__) 2.__init__():实例化方法,创建实例时自…
1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了,编程时显示远比隐式的更好,看下面的小栗子: 我们可以通过vars函数获知显示声明的属性,但是隐式的就无法获知了,这并不值得提倡,但是在知道参数的情况下我们还是可以对其进行赋值的,如下: 不论怎么样,显示的初始化属性是一个好习…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 可切片的对象 """ import numbers class sliceObject: def __init__(self, students): self.students = students def __reversed__(self): pass def __getitem__(self, item): """…
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 在访问对象访问类中…
魔法函数 __init__函数 init函数会在实例化A这个类的时候被调用 class A(): def __init__(self): print('__init__函数') a = A() 显示结果: __init__函数 __call__函数 class A(): def __call__(self): print('__call__函数') a = A() a() 显示结果: 但类被当成一个函数的时候会被调用 如果不写A类的call函数的话,会怎么在运行程序会怎么样呢? Tracebac…
python魔法方法:__getattr__,__setattr__,__getattribute__ 难得有时间看看书....静下心来好好的看了看Python..其实他真的没有自己最开始想的那么简单吧: 首先来看看上述三个魔法方法的定义吧: (1)__getattr__(self, item): 在访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理...这里要注意的时,假如一个对象叫fjs,  他有一个属性:fjs.name = "fjs",…
内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str方法等等. init(self, …):初始化对象class,在创建新对象时调用.在方法里,可以初始化该对象的属性,否则调用其他时可能出“现has no attribute”错误: del(self):释放对象,在对象被虚拟机删除之前调用: new(cls,*args,**kwd):实例的生成操作,…
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__ 可以达到一些简…
==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init __()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了,编程时显示远比隐式的更好,看下面的小栗子:   image 我们可以通过vars函数获知显示声明的属性,但是隐式的…
如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the accuracy of knn and find the k which makes the biggest accuracy k_range=list(range(1,26))#[1,25] scores=[] for k in k_range: knn=KNeighborsClassifier(n_…
11. (译)Python魔法方法指南 原文: http://www.rafekettler.com/magicmethods.html 原作者: Rafe Kettler 翻译: hit9 原版(英文版) Repo: https://github.com/RafeKettler/magicmethods Contents (译)Python魔法方法指南 简介 构造方法 操作符 比较操作符 数值操作符 一元操作符 常见算数操作符 反射算数运算符 增强赋值运算符 类型转换操作符 类的表示 访问控制…
Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方"表示 repr(x) x.__repr__() 作为一个字符串 str(x) x.__str__() 作为字节数组 bytes(x) x.__bytes__() 作为格式化字符串 format(x, format_spec) x.__format__(format_spec) __init__()方法在创…
1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法也可以认为是属性):分为两种: ① python自动产生的(魔法方法):一般形式为 __func__(),python会在对应的时机自动调用该函数: ② 人为自定义的方法:一般和普通函数没有区别,只是定义在了class中而已 3.方法与函数的区别: 方法可认为是函数的特殊情况: ① 方法定义在cla…
1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的.Python 的魔术方法非常强大,了解正确的方法去使用非常重要! 以下为python里魔法方法大全总结: 魔法方法 含义   基本的魔法方法 __new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,…
前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对python的影响 3.python常用的魔法函数 4.从len()方法看魔法函数的特点 5.魔法函数知识小结 一   python的魔法函数 1.什么是魔法函数? 魔法函数是Python中定义的,以__开头,__结尾,形如__fun__()的函数,一般使用已经定义好了的即可. 使用这样一些函数,可以…
with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前提下设置函数的默认参数 例如, 读写一个文件. 在读写前, 要打开它:在读写结束后要关闭它:读写过程中出现异常也得关闭它. 如果不使用with, 就得这么写: try: f = open('xxx', 'w') # write ... finally: f.close() 如果使用with, 则简短…