zoukankan      html  css  js  c++  java
  • 类中的反射 装逼利器

    功能 可以实现 用一个字符串调用类中对应的实例的方法:

    反射:

      hasattr (obj,name_str),判断一个对象obj里是否有字符串name_str的方法

      getattr(obj,name_srt),根据字符串去获取obj对象里的对应方法的内存地址

      setattr(obj,变量字符串,值) 给类的实例对象obj 加一个 变量字符串的属性 值是第三个参数

      delattr(obj,变量字符串)  删除变量字符串对应的obj对象的方法

    class Dog(object):


    def __init__(self,name):
    self.name = name
    def eat(self,food):
    print("%s在吃"%self.name,food)

    d = Dog("keji")
    choice = input(">>>:").strip()
    #想实现的功能 用字符串调用实例化的方法 eat
    #d.choice 直接这么写是不可以的 因为后面的是字符串
    #先判断有没有 这个方法
    if hasattr(d,choice):# 判断类实例中有没有什么方法? 有返回True
       delattr(d,choice) #判断是否有属性 如果有 删除 就这么用
        func = getattr(d,choice)# 取相应字符串的属性 用字符串映射出了实例的一个方法
    func("骨头")

    else:
        # setattr(d,choice,bulk) #x.y = V x是字符串 y是方法 V是值
    # d.bulk(d) #动态的吧一个类外面的方法装配到了 类里面
    setattr(d,choice,22) #动态的设置一个输入的属性
    print(getattr(d,choice))#打印动态属性对应的值

    这样就实现了用字符串 choice 调用 Dog类的 eat方法
  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/daluozi/p/8710433.html
Copyright © 2011-2022 走看看