类反射:
通过字符串映射或修改程序运行时的状态,属性,方法
有以下4个方法:
1. hasattr(obj, str)
判断obj对象是否存在str方法
通过字符串映射或修改程序运行时的状态,属性,方法
有以下4个方法:
1. hasattr(obj, str)
判断obj对象是否存在str方法
2. getattr(obj, str)
获取obj对象的内存地址
3. setattr(obj, str_name, func_name)
将方法func_name装配成obj的str_name方法
4. delattr(obj, str)
将对象obj中的str删除掉。
例1:
class Dog(object):
def __init__(self, name):
self.name = name
def eat(self, food):
print("%s is eating %s...." % (self.name, food))
d = Dog("Kitty")
sel = input(">>:").strip()
if hasattr(d, sel):
func = getattr(d, sel)
func("fruit")
获取obj对象的内存地址
3. setattr(obj, str_name, func_name)
将方法func_name装配成obj的str_name方法
4. delattr(obj, str)
将对象obj中的str删除掉。
例1:
class Dog(object):
def __init__(self, name):
self.name = name
def eat(self, food):
print("%s is eating %s...." % (self.name, food))
d = Dog("Kitty")
sel = input(">>:").strip()
if hasattr(d, sel):
func = getattr(d, sel)
func("fruit")
例2:
class Dog(object):
def __init__(self, name):
self.name = name
def eat(self, food):
print("%s is eating %s...." % (self.name, food))
d = Dog("Kitty")
sel = input(">>:").strip()
def bulk(self):
print("%s is talking...."% self.name)
if hasattr(d, sel):
func = getattr(d, sel)
func("fruit")
else:
setattr(d, sel, bulk)
func = getattr(d, sel)
func(d)
输出:
>>:gg
Kitty is talking....