python反射

python基础学习 第十八天 (一)

巧了我就是萌 提交于 2020-01-14 09:01:19
python基础学习 第十八天 (一) 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 1.1 对象的反射 class Foo : f = '类的静态变量' def __init__ ( self , name , age ) : self . name = name self . age = age def say_hi ( self ) : print ( 'hi,%s' % self . name ) obj = Foo ( 'egon' , 73 ) #检测是否含有某属性 print ( hasattr ( obj , 'name' ) ) print ( hasattr ( obj , 'say_hi' ) ) #获取属性 n = getattr ( obj , 'name' ) print ( n ) func = getattr ( obj , 'say_hi'

python目录之从入门到光头

≡放荡痞女 提交于 2020-01-13 18:59:24
后台管理 添加随笔 编写博客的基础 001 学到的markdown语法 python计算机基础 002 计算机的组成原理 003 编程语言分类 004 网络的瓶颈效应 005 计算机操作系统 006 python计算机基础之编程 python基础 python基础 007 python基础1 008 python基础2 009 Python 和Python解释器 010 python变量 011 Python变量内存管理 012 python解压缩 013 python注释 014 python格式化输出的三种方式 015 python基本算术运算符 016 python流程控制if判断与循环(for、while) 017 python深浅拷贝 018 python异常处理 019 接触python的一些小练习 python基础实战之猜年龄游戏 python支持的数据类型 020 python常量 021 python数字类型 022 python字符串类型 023 python列表类型 024 python字典类型 025 python布尔类型 026 python元组 027 python集合 028 python数据类型 029 一个列表如何根据另一个列表进行排序(数组的相对排序) 030 列表如何移除指定原属 031 列表内字典的排序 032 字典去重与排序 文件处理

Python魔法方法(二)

三世轮回 提交于 2020-01-11 07:57:23
类的表示 使用字符串来表示类是一个相当有用的特性。在Python中有一些内建方法可以返回类的表示,相对应的,也有一系列魔法方法可以用来自定义在使用这些内建函数时类的行为。 __str__(self) 定义对类的实例调用 str() 时的行为。 __repr__(self) 定义对类的实例调用 repr() 时的行为。 str() 和 repr() 最主要的差别在于“目标用户”。 repr() 的作用是产生机器可读的输出(大部分情况下,其输出可以作为有效的Python代码),而 str() 则产生人类可读的输出。 __unicode__(self) 定义对类的实例调用 unicode() 时的行为。 unicode() 和 str() 很像,只是它返回unicode字符串。注意,如果调用者试图调用 str() 而你的类只实现了 __unicode__() ,那么类将不能正常工作。所有你应该总是定义 __str__() ,以防有些人没有闲情雅致来使用unicode。 __format__(self) 定义当类的实例用于新式字符串格式化时的行为,例如, “Hello, 0:abc!”.format(a) 会导致调用 a.__format__(“abc”) 。当定义你自己的数值类型或字符串类型时,你可能想提供某些特殊的格式化选项,这种情况下这个魔法方法会非常有用。 __hash__

Python装饰器与面向切面编程

断了今生、忘了曾经 提交于 2020-01-07 18:25:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子。 1 2 3 4 def foo(): print 'in foo()' foo() 这是一个很无聊的函数没错。但是突然有一个更无聊的人,我们称呼他为B君,说我想看看执行这个函数用了多长时间,好吧,那么我们可以这样做: 1 2 3 4 5 6 7 8 import time def foo(): start= time.clock() print 'in foo()' end= time.clock() print 'used:', end- start foo() 很好,功能看起来无懈可击。可是蛋疼的B君此刻突然不想看这个函数了,他对另一个叫foo2的函数产生了更浓厚的兴趣。 怎么办呢?如果把以上新增加的代码复制到foo2里,这就犯了大忌了~复制什么的难道不是最讨厌了么!而且,如果B君继续看了其他的函数呢? 1.2. 以不变应万变

Python装饰器与面向切面编程

你。 提交于 2020-01-07 16:43:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 新年好~ 那么,很久没有更新了,其实想想也没多少可以写的,因为Python的文档似乎很全面的说……能做的差不多只有翻译和整理了,英文过关的朋友不妨直接去doc.python.org这里查看相关资料 :) 转载请注明原作者和原文地址,多谢! 今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子。 def foo(): print 'in foo()' foo() 这是一个很无聊的函数没错。但是突然有一个更无聊的人,我们称呼他为B君,说我想看看执行这个函数用了多长时间,好吧,那么我们可以这样做: import time def foo(): start = time.clock() print 'in foo()' end = time.clock() print 'used:', end - start foo() 很好,功能看起来无懈可击。可是蛋疼的B君此刻突然不想看这个函数了

Python可以减少代码量?我不信

Deadly 提交于 2020-01-01 19:55:46
突然看到好几篇文章,内容基本上是什么用Java需要100行,用PHP只需要30行,用Python只需要10行(数字记不清了)。简单说一下我的看法。 我不服,凭啥都是编程语言,你行我就不行? 我记不清当时给出的支持Python可以少写代码的栗子具体是什么了,它给出的是实现了某个功能,两行搞定,一行引入,一行调用。 当时看的我一脸懵逼,哇,真的耶。只用一行就可以。但稍后一想,这也太扯了吧。你看着貌似是只调用了一行代码,但里边具体的实现不还是有的么?代码量并没有减少,只不过是搬到了你看不到的地方,假象罢了。 当然,我是支持用Python可以少写代码的,但并不是刚才说的那样。 在我看来,这个问题得从语法层面来说,只有语法支持,才算真的能够减少代码量。其实各个语言都有其特定的语法。就像PHP中变量直接当函数用,直接当类用,连反射都不用了。 举个栗子就是大家都熟悉的lambda。现在有一个需求,要接收外部穿进来的函数。给出不同语言的实现 Java版本 // 因为Java中一切都是对象,所以尽管提供了lambda的支持,但并不能直接调用函数,而是以接口的形式调用 interface MathTest { int add(int a, int b); } // 接收lambda的函数 void dispose(MathTest mt){ int v = mt.add(1, 3); } //

Python面向对象 | 反射

眉间皱痕 提交于 2019-12-31 22:22:48
1. 什么是反射   反射主要是指程序可以 访问、检测和修改 它本身状态或行为的一种能力(自省)。 2. python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 四个内置函数: hasattr(obj, attr):   这个方法用于 检查obj是否有 一个名为attr的值的属性,返回一个布尔值。 getattr(obj, attr):   调用这个方法将 返回 obj中名为attr值的 属性的值 ,例如如果attr为'bar',则返回obj.bar。 setattr(obj, attr, val):   调用这个方法将给obj的名为attr的值的 属性赋值 为val。例如如果attr为'bar',则相当于obj.bar = val delattr(obj, name)   该函数 删除 该obj的一个由string指定的 属性 。delattr(x, 'foobar')=del x.foobar 对实例化对象的 反射 class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name) obj=Foo('Tony',18) #检测是否含有某属性

python全栈开发基础【第十七篇】面向对象反射和内置方法

陌路散爱 提交于 2019-12-30 04:17:57
一、静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用,不需要实例化 类方法和静态方法的不同点:   类方法必须有一个cls参数表示这个类,可以使用类属性   静态方法不需要参数 绑定方法:分为普通方法和类方法      普通方法:默认有一个self对象传进来,并且只能被对象调用-------绑定到对象       类方法:默认有一个cls对象传进来,并且可以被类和对象(不推荐)调用-----绑定到类 非绑定方法:静态方法:没有设置默认参数,并且可以被类和对象(不推荐)调用-----非绑定 # staticmethod和classmethod class Student: f = open('student', encoding='utf-8') def __init__(self): pass @classmethod #类方法 :有个默认参数cls,并且可以直接使用类名去 #调用,还可以与类属性交互(也就是可以使用类属性) def show_student_info_class(cls): # f = open('student', encoding='utf

Python中的内置函数

↘锁芯ラ 提交于 2019-12-29 05:51:20
Python中有很多内置函数,不需要我们调用模块可以直接使用,而且都是常用函数的封装,下面我们来看看Python中的内置函数都有那些。 1.abs() abs()是绝对值函数,把一个负数转化为正数,数字中常用的函数,实例如下: >>> a = -1.564   >>> b = - 8   >>> abs(a)   1.564   >>> abs(b)   8 2.all() all()就是传入参数列表,元组的对象都是真才为真,返回True;否则返回False。类似于Excel中的and()函数,要所有的值为真,结果才为真。这个函数主要用在判断上,判断所有条件都为真的时候使用,应该还有一个对应的函数or()只要有一个为真即为真的函数。 >>> all([11,22,33])   True   >>> all((11,22,33))   True   >>> all([11,0,22])   False   >>> all([11,"al2x","sb"])   True 常用的假的形式:Non3,""," ",[],(),{},0的形式都是代表假,使用bool()函数返回False. 3.any() any()代表只要有一个为真即为真,类似于Excel中的or()函数,只要一个为真,即为真。 >>> any([11,0,22])   True   >>> any([""])  

35个高级python知识点

痞子三分冷 提交于 2019-12-28 04:49:57
No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是 Python 中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Python的代码和模块也都是对象。 Python中函数和类可以赋值给一个变量 Python中函数和类可以存放到集合对象中 Python中函数和类可以作为一个函数的参数传递给函数 Python中函数和类可以作为返回值 Step.1 # 首先创建一个函数和一个Python3.x的新式类 class Demo(object): def __init__(self): print("Demo Class") # 定义一个函数 def function(): print("function") # 在Python无论是函数,还是类,都是对象,他们可以赋值给一个变量 class_value = Demo func_value = function # 并且可以通过变量调用 class_value() # Demo Class func_value() # function Step.2 # 将函数和类添加到集合中 obj_list = [] obj_list.append(Demo) obj_list.append(function) # 遍历列表 for i in obj_list: print