python反射

python之路——面向对象进阶

你说的曾经没有我的故事 提交于 2020-02-18 21:41:10
一、isinstance和issubclass    isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo)    issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)    二、反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 2 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) def hasattr(*args, **kwargs): # real signature unknown pass def getattr(object, name, default=None): # known special case

Python 反射

陌路散爱 提交于 2020-02-16 14:08:39
反射 在做程序开发中,我们常常会遇到这样的需求: 需要执行对象里的某个方法,或需要调用对象的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在 这时我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这种机制就称之为反射。接下来记录下反射几个的重要方法。 反射的四种方法 hasattr():判断一个对象里是否有对应的字符串方法 getattr():根据字符串去获取obj对象里的对应的方法的内存地址 setattr():给类实例对象动态添加一个新的属性 delattr():给类实例对象动态删除一个已有的属性 # class A: # def __init__(self): # self.a = 10 # # def func1(self): # print('func1') # # def func2(self): # print('func2') # # def func3(self): # print('func3') # a = A() # ret = getattr(a,'ab') # print(ret) # for i in range(10): # res = input('请输入你要访问的地址:') # if hasattr(a,res): 判断输入的字符是否在类中存在 # f = getattr(a,res) # f() # else: #

python基础面试集锦(1-50)

亡梦爱人 提交于 2020-02-10 18:16:28
目录 1、Python和Java、PHP、C、C#、C++等其他语言的对比 2、简述解释型语言和编译性语言? 3、Python解释器种类以及特点? 4 、位和字节的关系? 5、b、B、KB、MB、GB的关系? 6、一个字符不同编码对应的字节数? 7、PEP8编码规范? 8、or and 计算规则 9、求结果:or and 10、ASCII、unicode、utf-8、gbk区别? 11、字节码和机器编码的区别? 12、三元运算编写格式? 13、Python2和Python3的区别? 14、一行代码数值交换?交叉赋值 15、python2和python3中Int和long的区别? 16、xrange和range的区别? 17、字符串的反转序列?步长-1切 18、文件操作时:xreadlines和readlines的区别? 19、列举布尔值位false的常见值? 20、is和==的区别? 21、那些情况下,y!=x-(x-y)会成立? 22、现有字典dict = {'a':20,'b':25,'c':10,'d':50}请按字典中的value值进行排序? 23、如何将字典的键值互换? 24、字典和json的区别? 25、什么是可变、不可变类型? 26、存入字典里的数据有没有先后排序? 27、字典推导式? 28、描述一下dict的item()方法与iteritems()的不同? 29

常见设计模式 (python代码实现)

假如想象 提交于 2020-02-08 04:15:11
1.创建型模式 单例模式 单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保 某一个类只有一个实例存在 。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象 1 class Singleton(object): 2 def __init__(self): 3 pass 4 5 def __new__(cls, *args, **kwargs): 6 if not hasattr(Singleton, "_instance"): # 反射 7 Singleton._instance = object.__new__(cls) 8 return Singleton._instance 9 10 obj1 = Singleton() 11 obj2 = Singleton() 12 print

python基础面试集锦(51-100)

南楼画角 提交于 2020-02-06 21:32:54
目录 51、把aaabbbcccdd这种形式的字符串压缩成a3b3c3d2的形式? 52、给你一个字符串'abc',打印出该字符串的所有排列组合? 53、执行以下代码后,x的值为? 54、对于一个非空字符串,判断其是否可以有一个子字符串重复多次组成,字符串 只包含小写字母且长度不超过 10000 55、从0-99这100个数中随机取出10个不重复的值? 56、介绍一下try except的用法和作用? 57、在python中如何抛出,捕获,处理异常? 58、enumerate的作用是什么? 59、python递归最大深度? 60、列举常见的内置函数? 61、filter、map、reduce的作用? 62、一行代码实现9x9乘法表? 63、什么是闭包? 64、用装饰器,限制函数被调用的频率,如1秒一次 65、请实现一个装饰器,通过 一次调用时函数重复执行5次 66、一行代码输出1-100偶数列表。(列表推导式,filter) 67、解释生成器与函数的不同,并实现和简单使用generator 68、写出打印结果? 69、简述yield和yieldfrom关键字 70、以下代码输出的结果? 71、以下代码输出结果? 72、从一个列表中剔除重复的,然后求和 73、map(str,[1,2,3])输出是什么? 74、请简述标准库中functools.wraps的作用 75

Python内置函数

不想你离开。 提交于 2020-02-06 11:28:12
Duang! 68个内置函数 分类记忆 数学运算 × 7 abs() 、 divmod() 、 max() 、 min() 、pow() 、round() 、sum() 类型转换 × 24 bool() 、 int() 、 float() 、 complex() 、str() 、 ord() 、 chr() 、 bytearray() 、 bytes() 、 memoryview() 、 bin() 、 oct() 、 hex() 、 tuple() 、 list() 、 dict() 、 set() 、 frozenset()、 enumerate() 、 range() 、 iter() 、 slice() 、super() 、object() 序列操作 × 8 all() 、any() 、 filter() 、 map() 、next() 、reversed() 、sorted() 、zip() 对象操作 × 9 help() 、dir() 、 id() 、hash() 、type() 、len() 、ascii() 、format() 、vars() 反射操作 × 8 Import() 、isinstance() 、issubclass() 、hasattr() 、getattr() 、setattr() 、delattr() 、callable() 变量操作 × 2

面向对象

霸气de小男生 提交于 2020-02-04 14:49:48
第七章节 面向对象- 7.1 面向对象基本格式 ```python 定义类 class 类名: def 方法名(self,name): print(name) def 方法名(self,name): print(name) def 方法名(self,name): print(name) 调用类中的方法 1.创建该类的对象 obj = 类名() 2.通过对象调用方法 result = obj.方法名("alex") print(resutl) ``` 应用场景:遇到很多函数,需要给函数进行归类和划分。 练习题: ```python class Db: def db_read(self): pass def db_write(self): pass def db_delete(self): pass def db_update(self): pass class File: def file_read(self): pass def file_write(self): pass def file_delete(self): pass def file_update(self): pass class Redis: def redis_read(self): pass def redis_write(self): pass def redis_delete(self): pass def

从C#到Python —— 4 类及面向对象

▼魔方 西西 提交于 2020-02-04 13:18:08
如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented)应该不会陌生。Python与C#一样,能够很好地支持面向对象的编程模式。本章对Python中面向对象编程的基本知识进行介绍,并将其与C#中的对应部分进行比较。 4.1 类的定义与实例化 4.1.1 类的定义 与C#一样,Python使用class关键字定义一个类。一个最简单的类定义语句如下: 1 class A:2 pass 它等价于C#中的 class A{}。当然,以上语句没有任何实际意义,它只是告诉我们什么是定义一个类所必需的,即:class关键字,类名和冒号,pass关键字只用来占位,相当于C#中花括号的作用。 4.1.2 类的实例化 类是定义对象格式的模板,而对象则是类的实例,通过类创建对象的过程称为类的实例化。在C#中,需要使用new关键字实例化一个类,例如 A a = new A(); 在上条语句中,C#完成了两件事情:首先声明一个类型为A的变量a,然后用new运算符创建一个类型为A的对象,并将该对象的引用赋值给变量a。而在Python中没有new关键字,同时它是一种动态语言,不需要事先指定变量的类型,只需要: a = A() 即可创建一个类型为A的对象,看起来好像是将类当作一个函数调用,返回值是新创建的对象。 4.2 类的成员变量 4.2.1 为类添加数据

使用Python开发插件化应用程序

ε祈祈猫儿з 提交于 2020-02-01 08:52:46
插件化应用是个老话题啦,在我们的日常生活中更是屡见不鲜。无论是多年来臃肿不堪的Eclipse,亦或者是扩展丰富著称的Chrome,乃至近年来最优秀的编辑器VSCode,插件都是这其中重要的组成部分。插件的意义在于扩展应用程序的功能,这其实有点像iPhone手机和AppStore的关系,没有应用程序的手机无非就是一部手机,而拥有了应用程序的手机则可以是Everything。显然,安装或卸载应用程序并不会影响手机的基本功能,而应用程序离开了手机同样无法单独运行。所以,所谓“插件”,实际上是 一种按照一定规范开发的应用程序,它只能运行在特定的软件平台/应用程序且无法运行 。这里,最重要的一点是应用程序可以不依赖插件单独运行,这是这类“插件式”应用的基本要求。 好了,在了解了插件的概念以后,我们来切入今天的正文。博主曾经在 《基于Python实现Windows下壁纸切换功能》 这篇文章中编写了一个小程序,它可以配合Windows注册表实现从 Unsplash 上抓取壁纸的功能。最近,博主想为这个小程序增加 必应壁纸 和 WallHaven 两个壁纸来源,考虑到大多数的壁纸抓取流程是一样的,博主决定以“插件”的方式完成这次迭代,换句话说,主程序不需要再做任何调整,当我们希望增加新的数据源的时候,只需要写一个.py脚本即可,这就是今天这篇文章的写作缘由。同样的功能,如果使用Java/C

Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等

无人久伴 提交于 2020-01-28 17:01:22
目录 静态 静态属性@property 类方法@classmethod 静态方法@staticmethod 组合 继承与派生 继承与派生 继承顺序 在子类中调用父类方法与super 多态 封装 反射 模块的动态导入 内置的attr方法 带双下户线的attr方法__setattr__、__getattr__、__delattr__ __getattr__方法的牛逼用法 继承方式完成包装 静态 静态属性@property 以类Room为例,Room类里面存储了width、length、height属性,面积、体积都是通过这些属性计算出来的,没有必要再存一份面积、体积。使用装饰器@property可以把有返回值的方法变成属性一样,这样减少了冗余,对调用者来说就像直接访问属性一样方便。这就是静态属性。 class Room: def __init__(self, name, owner, width, length, height): self.name = name self.owner = owner self.width = width self.length = length self.height = height pass @property def area(self): """ 计算面积 :return: 面积 """ return self.width * self