码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象之反射

时间:2018-10-10 00:59:43      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:get   实例化   .com   python   lock   lld   一个   code   print   

标签(空格分隔): 反射


本章主要共同学习一下面向对象的反射

说到反射,先不说反射的定义,我们先来考虑一个问题:
如果我之前定义过一个类的话,有类实例化对象,我们可以通过类来访问对象的属性;

这里我们先定义一个类:

class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def talk(self):
        print('%s is talking' %self.name)
obj=People('engon',18)
print(obj.talk)#这里是属性
print(obj.name) #obj.__dict__{'name'}

上述例子说明:我们之前访问属性,方法,是通过对象.来的

  • 若果我们的程序有和用户互动的,需要用户输入想要访问的属性:
    看下边的代码对吗?
class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def talk(self):
        print('%s is talking' %self.name)
obj=People('engon',18)

choice=input('>>:')
print(obj.choice)

上面的代码执行结果肯定不行,因为obj.,.的后边一定是一个属性的名字,而不是一个字符串;

  • 现在的关键点是我们要通过用户通过字符串能够映射到属性:
    问题:怎么通过字符串来映射一个对象属性:(这里需要我们学会几种内置的方法)
    1.hasattr()
class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def talk(self):
        print('%s is talking' %self.name)
obj=People('engon',18)
print(hasattr(obj,'name'))#obj.name #obj.__dict__{'name'}
print(hasattr(obj,talk))
print(getattr(obj,'nameXXX',None))#获取
print(getattr(obj,'talk',None))
setattr(boj,'sex','male') #obj.sex='male'#设置模块
print(obj.sex)
delattr(obj,'age')#删除
print(obj.__dict__)

反射的应用:

技术分享图片

通过下边的代码我们可以通过接收用户的输入来,调用属性;
技术分享图片

技术分享图片

这样就可以映射了;

面向对象之反射

标签:get   实例化   .com   python   lock   lld   一个   code   print   

原文地址:https://www.cnblogs.com/surewing/p/9763945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!