我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python27 反射

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python27 反射

反射:通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法

1.getattr:
2.hasattr:判断一个对象里是否有对应(相同名称)字符串的方法
3.setattr
4.delattr
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self):
        print ('%s is eating...'% self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()   #让用户输入项调用Dog类中的功能(方法)

d.choice()

image_1c17eg6q8fcj1td2bnq1jo01vnb9.png-13.4kB
图中输入choice的内容是一个字符串,正常调用d.eat()这可不是一个字符串。
报错提示Dog中不存在attribute choice(字符串)


class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self):
        print ('%s is eating...'% self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()   

print (hasattr(d,choice))   #判断对象d里是否有对应eat字符串的方法    #hasattr的全称就是hasattribute(有没有属性....)

执行结果:
>>:eat
True    #通过这种方式就可以确认在class Dog中是否存在eat功能了

执行结果:
>>:talk
False

class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self):
        print ('%s is eating...' % self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):   #如果d中存在eat
    getattr(d,choice)()  #就用getattr调用d.eat,后面不加括号的话就是打印内存信息了
#根据字符串去获取d对象里的方法的内存地址
执行结果:
>>:eat
XiaoBai is eating...
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food): #设置food参数
        print ('%s is eating...' % self.name,food)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):
    func = getattr(d,choice) #当前func==d.eat
    func('Bone')    #将Bone传给food参数
setattr()
我们通过ctrl点进去setattr中

image_1c17gckbcjhda4k1v8p1q2km16m.png-16.9kB
x表示对象
y被引号引着表示y是字符串
x.y=v v相当于值

class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):
    func = getattr(d,choice)
    func('Bone')
else:
    setattr(d,choice,bulk)  #将bulk赋值给choice(这里choice=talk,也就相当于赋值给talk)
    d.talk(d)
    #这里choice=talk,这里d.talk=bulk,bulk本身是一个函数内存地址,将这个内存地址赋值给了talk,当前talk相当于bulk这个函数了,所以调用d.talk就相当于调用bulk这个函数,而d.bulk则是不存在的.

执行结果:
>>:talk
XiaoBai is yelling.....
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):
    func = getattr(d,choice)
    func('Bone')
else:
    # setattr(d,choice,bulk)
    # d.talk(d)
    setattr(d,choice,22)    #建立一个新的、不存在的静态属性,赋予值22
    print (getattr(d,choice))

执行结果:
>>:age  #建立的静态属性名称为age,然后得到赋值22
22

执行结果:
>>:name     #这里输入已存在的变量名
Traceback (most recent call last):
  File "E:/Python/练习代码/A1.py", line 20, in <module>
    func('Bone')
TypeError: 'str' object is not callable
#因为name的值已经通过func = getattr(d,choice)获取了,不能通过func('Bone')这样调用
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):

    setattr(d,choice,'LeLe')    #设置已有属性的值(相当于更改了)

else:
    # setattr(d,choice,bulk)
    # d.talk(d)
    setattr(d,choice,22)
    print (getattr(d,choice))

print (d.name)

执行结果:
>>:name
LeLe    #可以看到已经不是XiaoBai了,是改过的LeLe
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):

    delattr(d,choice)   #删除属性

else:
    # setattr(d,choice,bulk)
    # d.talk(d)
    setattr(d,choice,22)
    print (getattr(d,choice))

print (d.name)

执行结果:
>>:name     #指定删除name这个属性
Traceback (most recent call last):
  File "E:/Python/练习代码/A1.py", line 28, in <module>
    print (d.name)
AttributeError: 'Dog' object has no attribute 'name'
#可以看到name属性已不存在
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):

    getattr(d,choice)

else:
    setattr(d,choice,None)
    print (d.choice)    #这里是不能这么打印的,这里的choice只是单纯的一个叫choice的字符串,而不是choice = input输入的值。
    AA = d.choice

print (d.name)

执行结果:
>>:age
Traceback (most recent call last):
  File "E:/Python/练习代码/A2.py", line 25, in <module>
    print (d.choice)
AttributeError: 'Dog' object has no attribute 'choice'
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):

    getattr(d,choice)

else:
    setattr(d,choice,None)
    AA = getattr(d,choice)      #需要先通过getattr获取这个choice的值
    print (AA)

执行结果:
>>:age
None
class Dog(object):

    def __init__(self,name):
        self.name = name

    def eat(self,food):
        print ('%s is eating...' % self.name,food)

def bulk(self):
    print ('%s is yelling.....' %self.name)

d = Dog('XiaoBai')
choice = input('>>:').strip()

if hasattr(d,choice):

    getattr(d,choice)

else:
    setattr(d,choice,None)
    print (d.age)   #这个age就是choice=input输入的值,因为age存在所以可以直接打印
    AA = getattr(d,choice)      #需要先通过getattr获取这个choice的值
    print (AA)

执行结果:
>>:age
None    #print (d.age)
None    #print (AA)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python27 反射

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

下载Word文档

猜你喜欢

Python27 反射

反射:通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法1.getattr:2.hasattr:判断一个对象里是否有对应(相同名称)字符串的方法3.setattr4.delattrclass Dog(object):
2023-01-31

Unity3d 射线反射

As any person that has already used Unity’s Ray class knows, there’s no support for reflection, which could be useful fo
2023-01-31

Python27+Opencv3 Vid

最近在win10 X64部署了Python27 win32 + Opencv3的环境,具体过程记录于其他博文。进行图片的相关操作等均正常,但是在操作视频时,出现了问题。具体如下代码:Cap = cv2.VideoCapture('*****
2023-01-31

Python_反射

一.反射定义放射是指程序可以访问。检测和修改它本身状态或行为的一种能力(自省)。二.四个自省的函数Python中提供了以下四种自省的函数,使用于类和对象。1.hasattr函数--用于判断obj中有没有name字符串对应的方法或属性,若有返
2023-01-31

AS3反射

反射这玩意,在一些游戏的框架中的确有其优势,但是注意反射或多或少会影响性能的.在资源的获取上就 使用了反射 , 得到SWF中的美术的资源 如:public static function getClazz(className : Strin
2023-01-31
2023-09-02

python 反射

1.反射主要是用到了4个函数(  用的最多的就是getattr()和 hasattr()  ):getattr()   从xxx对象中获取到xxx属性值hasattr()  判断xxx对象中是否有xxx属性值delattr()   从xxx
2023-01-30

Python-----反射

class Person(object): """定义一个人类""" def __init__(self, name): self.name = name def eat(self, food):
2023-01-31

Python反射

反射的定义根据字符串的形式去某个对象中操作成员根据字符串的形式去一个对象中寻找成员根据字符串的形式去一个对象中设置成员根据字符串的形式去一个对象中删除成员根据字符串的形式去一个对象中判断成员是否存在初始反射通过字符串的形式,导入模块根据用户
2023-01-31

C#反射的入门之C#反射实例

C#反射的入门学习首先要明白C#反射提供了封装程序集、模块和类型的对象等等。那么这样可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
C#反射模块2024-12-03

Python 反射-isinstance

用到的isinstance(对象,类)  -------------------  判断一个对象是否是一个类的实例issubclass(子类,父类)  ----------------  判断一个类是否是一个类的子类hasattr(对象,字
2023-01-30

python之反射

1. isinstance, type, issubclass的区别class Animal: def eat(self): print("刚睡醒吃点儿东西")class Cat(Animal): def play
2023-01-30

Java反射进阶—聊聊反射的几个问题

昨天有朋友反映好多反射知识没说到,所以今天算是补充篇,一起看看反射的进阶知识点。

Python27+Opencv3 捕获网

Opencv3+Python比较常见的是播放本地avi视频文件、或者捕获PC自带摄像头视频。现在网络摄像机遍布,而我们测试时也需要用到网络摄像机的实时视频,并进行处理,参考《opencv3计算机视觉(python语言实现)》编写了捕获网络摄
2023-01-31

AJPFX反射及反射的应用该如何理解

本篇文章为大家展示了AJPFX反射及反射的应用该如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。怎么理解反射,反射的应用 反射就是把Java类中的各种成分映射成相应的Java类。
2023-06-02

php有反射吗

这篇文章主要讲解了“php有反射吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php有反射吗”吧!php有反射,php具有完整的反射API,增加了内省类、接口、函数、方法和扩展的能力; 此
2023-06-22

java反射应用

反射使用JAVA反应进行两个vo有相同字段名字进行子转换:@Test public void doTransTest() { A a= new A(); A.setC(111L); B b= new B();
java反射应用
2017-08-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录