iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python学习之反射
  • 622
分享到

python学习之反射

反射python 2023-01-31 01:01:28 622人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python学习反射实例1脚本内容如下:#coding: utf8class myClass(object):    def fax(self):        print 'faxing....'    def copy(self): 

python学习反射


实例1

脚本内容如下:

#coding: utf8


class myClass(object):

    def fax(self):

        print 'faxing....'

    def copy(self):

        print 'copying...'


def printing():

    print 'printing....'


m = myClass()

if hasattr(m,'fax'):          #判断myClass类中是否有fax方法

    func = getattr(m,'fax')    #返回内存对象

    func()                #调用

setattr(m,'print2',printing)

m.print2()



try:

    #delattr(m,'copy')

    #print name

    #print dfdf

    #print tttt

    print m

except AttributeError,e:

    print 'something wrong..',e


except Exception,e:

    print e


finally:

    print '-----------'

#else:

#    print "print nothing wrong ...."

执行脚本结果如下:

faxing....

printing....

<__main__.myClass object at 0x028211D0>

-----------


实例2

脚本内容如下:

#/usr/bin/env python

#coding: utf8


import sys


class WEBServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


if __name__ == "__main__":

     server = WebServer('localhost',80)

     #print sys.argv[1]

     cmd_dic = {

        'start':server.start,

        'stop':server.stop,

        'restart':server.restart,

     }

    #if sys.argv[1] == 'start':

     if sys.argv[1] in cmd_dic:

        cmd_dic[sys.argv[1]]()

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射01.py start

Server is starting...


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射02.py start

Server is starting...


D:\Python学习\脚本学习>python 反射02.py stop

Server is stopping...


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


def test_run(name):

    print "running...",name


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()


     setattr(server,'run',test_run)  ##test_run以run身份绑定到server实例中

     server.run('peng')       ##类似执行test_run('peng')


执行脚本结果如下:

D:\Python学习\脚本学习>python 反射03.py start

Server is starting...

running... peng


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


def test_run(self,name):

    print "running...",name,self.host


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()


     setattr(server,'run',test_run)  ##test_run以run身份绑定到server实例中

     server.run(server,'peng')       ##类似执行test_run('peng')

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射04.py start

Server is starting...

running... peng localhost


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


def test_run(self,name):

    print "running...",name,self.host


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()


     delattr(WebServer,'start')

     print server.restart()



     #setattr(server,'run',test_run)  ##test_run以run身份绑定到server实例中

     #server.run(server,'peng')       ##类似执行test_run('peng')

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射05.py restart

Server is stopping...    ---》执行的是func()的调用

Server is starting...    ---》执行的是func()的调用

Server is stopping...    ---》执行的是server.restart()的调用

Traceback (most recent call last):

  File "反射05.py", line 31, in <module>

    print server.restart()

  File "反射05.py", line 19, in restart

    self.start()

AttributeError: 'WebServer' object has no attribute 'start' ---》执行的是server.restart()的调用,此时start已经删除,所以报了“'WebServer' object has no attribute 'start'”错误!!!

--结束END--

本文标题: python学习之反射

本文链接: https://www.lsjlt.com/news/184040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python学习之反射
    python学习反射实例1脚本内容如下:#coding: utf8class myClass(object):    def fax(self):        print 'faxing....'    def copy(self):  ...
    99+
    2023-01-31
    反射 python
  • python3学习之反射
    1、反射  用于方法调用 利用字符串的形式去对象中操作成员(增/删/查),注意仅是在内存中操作 #hasattr(模块,'字符串'): 判断有没有 ,模块中有没有“字符串”为名字的成员;   返还True或者False #getattr(模...
    99+
    2023-01-31
    反射
  • Python基础学习之反射机制详解
    目录什么是反射应用场景基本小栗子贴近实际应用的小场景什么是反射 在Python中,反射是指通过一组内置的函数和语句,在运行时动态地访问、检查和修改对象的属性、方法和类信息的机制。Py...
    99+
    2023-03-22
    Python反射机制 Python反射
  • python学习 day018打卡 反射
    本节主要内容: 1.isinstance,type,issubclass 2.区分函数和方法 3.反射(重点)   一.isinstance,type,issubclass issubclass():判断xxx类是否是yyy类型的子类 ...
    99+
    2023-01-30
    反射 python
  • Python学习 :反射 & 单例模式
     反射   什么是反射?   - 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)   面向对象中的反射   - 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员   - python中的一切事物都是对象...
    99+
    2023-01-31
    反射 模式 Python
  • JavaScript 反射学习技巧
    目录1、前言2、接口3、简单的例子4、结语1、前言 根据 MDN 官网解释: Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与 proxy ...
    99+
    2024-04-02
  • Java高级语法学习之反射详解
    目录一、什么是反射二、准备测试:实体类的创建三、反射中的几个重要类及方法(一)反射中的重要类之Class(二)反射中的重要类之Field(三)反射中的重要类之Constructor(...
    99+
    2024-04-02
  • python之反射
    1. isinstance, type, issubclass的区别 class Animal: def eat(self): print("刚睡醒吃点儿东西") class Cat(Animal): ...
    99+
    2023-01-30
    反射 python
  • Go语言学习之反射的用法详解
    目录1. reflect 包1.1 获取变量类型1.2 断言处理类型转换2. ValueOf2.1 获取变量值2.2 类型转换3. Value.Set3.1 设置变量值3.2 示例4...
    99+
    2024-04-02
  • Golang学习之反射机制的用法详解
    目录介绍TypeOf() ValueOf()获取接口变量信息事先知道原有类型的时候事先不知道原有类型的时候介绍 反射的本质就是在程序运行的时候,获取对象的类型信息和内存结构,反射是把...
    99+
    2024-04-02
  • Java基础学习之反射机制原理详解
    目录一、什么是反射二、反射的原理三、反射的优缺点四、反射的用途五、反射机制常用的类六、反射的基本使用一、什么是反射 (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细...
    99+
    2024-04-02
  • Python功能之反射
    有如下文件:index.py#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ryan' """ import home print 'oldboy....' url=ra...
    99+
    2023-01-31
    反射 功能 Python
  • Go语言学习教程之反射的示例详解
    目录介绍反射的规律1. 从接口值到反射对象的反射2. 从反射对象到接口值的反射3. 要修改反射对象,该值一定是可设置的介绍 reflect包实现运行时反射,允许一个程序操作任何类型...
    99+
    2024-04-02
  • Java学习教程:Java基础——反射
    什么是反射?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。例如:我们在开发的过程当中,...
    99+
    2023-06-03
  • Java反射机制的学习总结
    一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制 有些...
    99+
    2022-11-15
    Java 反射机制
  • Java中反射的学习笔记分享
    目录简介一个简单的例子设置使用反射模拟instanceof运算了解类的方法获取有关构造函数的信息查找类字段按名称调用方法创建新对象更改字段的值使用数组总结简介 反射是Java编程语言...
    99+
    2022-11-13
    Java 反射
  • python面向对象之反射
    一、静态方法(staticmethod)和类方法(classmethod)类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属×××互(也就是可以使用类属性)静态方法:让类里的方法直接被类调用,就像正常调用函数一样类方法和静态方...
    99+
    2023-01-31
    反射 面向对象 python
  • python 反射
    1.反射 主要是用到了4个函数(  用的最多的就是getattr()和 hasattr()  ): getattr()   从xxx对象中获取到xxx属性值 hasattr()  判断xxx对象中是否有xxx属性值delattr()   ...
    99+
    2023-01-30
    反射 python
  • Python反射
    反射的定义根据字符串的形式去某个对象中操作成员根据字符串的形式去一个对象中寻找成员根据字符串的形式去一个对象中设置成员根据字符串的形式去一个对象中删除成员根据字符串的形式去一个对象中判断成员是否存在初始反射通过字符串的形式,导入模块根据用户...
    99+
    2023-01-31
    反射 Python
  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-...
    99+
    2023-01-31
    之路 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作