python 入坑路 反射
一、概述
反射我们以后会经常用到,这个东西实现了动态的装配,通过字符串来反射类中的属性和方法
二、反射函数
2.1 hasattr(obj,name_str)
作用:判断一个对象 obj,是否有用户输入的方法及属性 ,有就返回True , 没有就False
class Dog(object):
'''
dog class
'''
class_shuxing="hehe"
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
str=input("pls input:").strip()
print(hasattr(Dog,str))
----
输入:eat True
输入;name False
2.2 getattr(obj,str)
作用:根据 用户输入 str 去获取一个obj 方法的内存地址,
class Dog(object):
'''
dog class
'''
class_shuxing="hehe"
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
str=input("pls input:").strip()
print(getattr(Dog,str))
---
pls input:eat
<function Dog.eat at 0x0000000002339158>
2.3 setattr
作用:把一个函数,动态的传到一个类中, 相当于 静态方法,结合前面两个以前用,show tiem...
class Dog(object):
'''
dog class
'''
class_shuxing="hehe"
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
def bulk(self):
print("%s is bulking..." %self.name)
d=Dog("NIUBI")
str=input("pls input:").strip()
if hasattr(d,str):
getattr(d,str)()
else:
setattr(d,str,bulk)#调用的名称是输入的str ,相当于给 bulk 函数改名字,传入Dog 类
getattr(d,str)(d) #需要把 obj 传进去
2.4 delattr ,删除对象中的,属性及方法
class Dog(object):
'''
dog class
'''
class_shuxing="hehe"
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
def bulk(self):
print("%s is bulking..." %self.name)
d=Dog("NIUBI")
str=input("pls input:").strip()
if hasattr(d,str):
v=getattr(d,str)
print(v)
delattr(d,str)
print(hasattr(d,str))
-----
pls input:name
NIUBI
False

浙公网安备 33010602011771号