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

  

 

posted @ 2018-02-02 15:32  东郭仔  阅读(102)  评论(0)    收藏  举报