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

面向对象基础 反射

时间:2016-06-01 01:32:41      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

一 、反射(根据字符串的形式去对象(某个模块)中操作成员)

  python中的反射功能是有以下四个内置函数提供:hahasattr、getattr、aetattr、delattr,这四个函数分别用于对对象内部执行:检查是否含有某成员,获取成员、设置成员、删除成员

1、通过字符串的形式来导入模块

inp=input("请输入模块名:")
mo=__import__(inp)

 2、通过字符串的形式,在模块中寻找指定的函数,并执行

两种情况:1、如果在同级目录下面直接用__import__("xxxx")

       2、如果不在同一级目录下面(目录嵌套)用__import__("xxx.xxxx.xxx",fromlist=True)

# getattr
inp = input("请输入模块名:")  #以字符串的形式导入模块 mo = __import__(inp) inm = input("请输入函数名:")  #以字符串的形式在模块中找方法  相当于form  xxx  import  xxx f = getattr(mo,inm) f()

getattr(模块名,"xxx",None)  去模块中找xxx,如果没有没有找到则报错,我们也可以设置默认值None  如果没有找到则返回None(不报错)

 hasattr(模块名,"xxx")根据字符串的形式判断xxx是否存在

setattr(模块名,"xxx",xxx)在内存中为某个模块设置一个东西

import asd
print(hasattr(asd,"age"))
setattr(asd,"age",18)
print(hasattr(asd,"age"))

False
True

 delattr(模块名,"xxx") 在内存中删除某个东西

import asd
print(hasattr(asd,"name"))    #以前有
delattr(asd,"name")              #现在删除
print(hasattr(asd,"name"))

True
False

 基于反射实现类web框架的路由系统

import asd
url=input("请输入网址:")
new=url.split("/")
ret=hasattr(asd,new[1])                #用户直接输入网址www.xxxxxx/方法  就可以执行方法
if ret:
    r=getattr(asd,new[1])
    r()
else:
    print("404")

 

url=input("请输入模块名/方法:")
mo,faf=url.split("/")
m=__import__("xxx."+mo)
ret=hasattr(m,faf)                  #用户通过输入模块名/犯法就可以从任意的一个模块下执行任意一个方法
if ret:
    r=getattr(m,faf)
    r()
else:
    print("404")

 二、面向对象

概述:

面向过程:根据业务逻辑从上到下垒代码

函数式编程:将某功能代码分装到函数中,日后便无需再写,直接调用

面向对象:

创建类和对象

面向对象编程是一种编程方式,此编程方式的使用需要使用 “类” 和 “对象”实现,所以面向对象就是对类和对象的使用

(类中函数的第一个参数必须是self)

技术分享

class f:
    def f1(self):
        pass
    def f2(self):
        pass
obj=f()
obj.f1()

面向对象的三大特性:

封装,继承和多态

1、封装,顾名思义就是把内容分装到某个地方

所以在使用面向对象的封装功能时:1、将内容分装到某处

                2、从某处调用封装的函数

 

面向对象基础 反射

标签:

原文地址:http://www.cnblogs.com/luxiaojun/p/5547677.html

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