Python学习week7_映射

映射:通过用户输入的字符串调用对象的属性和方法。

调用时使用对象真实的方法名和属性名,***attr()的参数使用的是用户输入的字符串,由此完成用户输入的字符串和对象实际属性和方法的连接。

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

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

 

class Person(object):
    def __init__(self,name):
        self.name=name
    def eat(self,food):
        print('%s is eating '%self.name,food)       #注意此处的用法

p1=Person('刚田武')
choice=input('please input:').strip()
if hasattr(p1,choice):
    func=getattr(p1,choice)
    func('包子')
运行后输入eat,输出为:
刚田武 is eating  包子
如果输入的是name,程序报错,func被赋值p1.name,是属性值,不能被调用

 

 setattr(obj,'name_str',z)  相当于obj.name_str=z

用来设置属性值时:

class Person(object):
    def __init__(self,name):
        self.name=name
    def eat(self,food):
        print('%s is eating '%self.name,food)       #注意此处的用法
def laugh(self):
    print('%s is laughing'%self.name)
p1=Person('刚田武')
choice=input('please input:').strip()
if hasattr(p1,choice):
    setattr(p1,choice,'胖虎')
print(p1.name)
运行后,输入name,输出为:
胖虎

 用来设置成方法时:

class Person(object):
    def __init__(self,name):
        self.name=name
    def eat(self,food):
        print('%s is eating '%self.name,food)       #注意此处的用法
def laugh(self):
    print('%s is laughing'%self.name)
p1=Person('刚田武')
choice=input('please input:').strip()
if hasattr(p1,choice):
    setattr(p1,choice,'胖虎')
else:
    setattr(p1,choice,laugh)
    p1.talk(p1)

运行,只有当输入talk时,程序正常运行,输出为:
刚田武 is laughing
把:
else:
    setattr(p1,choice,laugh)
    p1.talk(p1)
修改成:
else:
    setattr(p1,choice,laugh)
    func =getattr(p1,choice)
    func(p1)
输入任意,都可以执行laugh()方法

delattr(obj,name_str)  删除obj.name_str属性

 

posted @ 2018-10-14 15:40  我的下铺刚田武  阅读(118)  评论(0编辑  收藏  举报