类的特殊方法 反射 getattr hasattr setattr delattr

反射能够将字符串映射到类的方法或者属性的内存地址,达到通过字符串访问类属性 方法的作用,主要有四种方法

 1 class Human(object):
 2     def __init__(self, name, age, hobby):
 3         self.name = name
 4         self.age = age
 5         self.hobby = hobby
 6     def info(self):
 7         print("my name is %s, age ia %s"%(self.name, self.age))
 8
 9 def get_hobby(self): #定义一个函数,后面使用setattr方法将其装配进man1这个对象,此时函数与类以及对象无任何关系
10     print("my hobby is %s"%self.hobby)
11
12 man1 = Human("张三", 25, "running") #初始化一个对象
13 fun = input("please inpute the function you want:").strip()
14 if hasattr(man1, fun): #hasattr有两个参数,第一个为对象名,第二个为字符串,判断对象是否有字符串名的属性或者方法,有则返回True,否则返回False
15     getattr(man1, fun)() #getattr参数与hasattr一致,如果字符串对应对象的属性则直接返回属性内容,如果是方法则返回方法的内存地址,内存地址加()就可以获取执行结果
16 else:#当输出其它不属于类本身的方法  属性时就将get_hobby函数装配进对象并调用
17     setattr(man1, fun, get_hobby) #将get_hobby函数装配进man1对象,并且后续使用man1.fun()调用get_hobby,类似于man1.fun = get_hobby
18     getattr(man1, fun)(man1) # 使用getattr调用装配的get_hobby方法,由于方法是后装配的实例调用需要手动传入self即对象本身
19     delattr(man1, fun) #删除man1对象对应fun字符串的方法或者属性,输入非info则上一行正常执行下一行会报错无此方法
20     getattr(man1, fun)(man1)

原文地址:https://www.cnblogs.com/flags-blog/p/12243455.html

时间: 2024-10-05 13:34:41

类的特殊方法 反射 getattr hasattr setattr delattr的相关文章

(转)Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)

Python自动化运维之13.异常处理及反射(__import__,getattr,hasattr,setattr) 一.异常处理 python异常: python的运行时错误称作异常 (1)语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 (2)逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成.计算或者输出结果需要的过程无法执行等 python异常是一个对象,表示错误或意外情况 (1)在python检测到一个错误时,将触发一个异常 python可以通常异常传导机

getattr() hasattr() setattr() 函数的使用方法

hasattr( obj , name ) 判断某个对象是否有   name 方法 getattr(obj , name ,[default])  获取某个对象的属性或者方法 setattr(obj , name,val) 为某个对象的某个属性 赋值   , 没有返回值 原文地址:https://www.cnblogs.com/chenxiyuxiao/p/10861415.html

反射 方法反射的操作

方法的反射 1.如何获取某个方法 方法的名称和参数列表才能唯一确定某一个方法 2.方法反射的操作 method.invoke(对象,参数列表); 3.示例 1 package com.reflect; 2 3 import java.lang.reflect.Method; 4 5 /** 6 * @author 作者:方o丈 7 * @version 创建时间:2018年6月9日 下午11:06:27 类说明:方法反射的操作 8 */ 9 public class MethodReflect

python中反射的三个方法hasattr,getattr,setattr

hasattr(obj,attr) getattr(obj,attr) setattr(obj,attr,val) class People: def eat(self): print('eat') def drink(self): print('drink') def code(self): print('code') p = People() # p为指向类的实例 hasattr(p,'eat') # 在实例中是否有eat方法 True hasattr(p,'code') True geta

Python的getattr(),setattr(),delattr(),hasattr()及类内建__getattr__应用

@Python的getattr(),setattr(),delattr(),hasattr() 先转一篇博文,参考.最后再给出一个例子 getattr()函数是Python自省的核心函数,具体使用大体如下: 获取对象引用getattrGetattr用于返回一个对象属性,或者方法 class A: def __init__(self): self.name = 'zhangjing'   #self.age='24' def method(self): print"method print&quo

反射getattr,hasattr,setattr,delattr

通过字符串映射或修改程序运行时的状态.属性.方法, 有以下4个方法 getattr(object, name_str, default=None) 根据字符串name_str去获取obj对象里的方法内存地址hasattr(object,name_str) 判断一个对象里是否有对应的name_str字符串的方法setattr(obj, y, v)这个相当于obj.y=vdelattr(x, y) class Foo(object): def __init__(self): self.name =

hasattr、getattr、setattr、delattr、反射

目录 hasattr getattr setattr delattr 反射的应用 __import__(了解) 思考: 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射 反射:用字符串的方式去访问对象的属性,调用对象的方法,python中一切皆对象,都可以使用反射. hasattr(obj, name):检查

Python hasattr,getattr,setattr,delattr

#!/usr/bin/env python# -*- coding:utf-8 -*-# 作者:Presley# 邮箱:[email protected]# 时间:2018-11-04# 反射使用import sysclass WebServer(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print("Server is starting...")

python之hasattr、getattr和setattr函数

hasattr函数使用方法 1 # hasattr函数使用方法 2 # hasattr(object,attr) 3 # 判断一个对象里是否有某个属性或方法,返回布尔值,有为True,否则False 4 class person(): 5 '''测试类''' 6 name = 'mike' 7 age = '25' 8 9 def say(self): 10 '''测试方法''' 11 return 'hello!' 12 13 14 per = person() 15 has_name = h