python全栈学习笔记(十七)反射、类的封装、继承和多态

 

 

这两种导入模块的方法实际上是一样的

 

可以这样 ,通过字符串的形式导入模块

上面是以字符串的方式导入模块,下面这个通过getattr函数以str的方式导入函数。

 

 

通过setattr 可以在内存里给相应的模块里创建全局变量。
比如下面这个例子就是:在commons这个模块里创建变量名为“AGE” 值为18的全局变量
通过setattr也可以创建函数

 

hasattr函数:

class Foo(object):
 
    def __init__(self):
        self.name = 'wupeiqi'
 
    def func(self):
        return 'func'
 
obj = Foo()
 
# #### 检查是否含有成员 ####
hasattr(obj, 'name')
hasattr(obj, 'func')

 

delattr则是删除某个对象,但是对模块文件本身内容不做修改,这些操作都是在内存里面完成

 

 

如果模块在是多层嵌套的情况下,可以使用下面这种方法,必须加上参数fromlist=True,这种方法就相当于from lib.test import com
如果不加上fromlist,则只会找到lib目录下

 

 

如果我们通过判断用户的url的最后一个字段,来调用模块里的不同函数,
简单费事的方法是把模块里具有的函数,使用if ---elif---。。。else  来一一判断用户输入哪个字段,就执行哪个函数。但是这种做法的弊端是没有操作麻烦,如果模块里的函数特别多呢。
 
第二种方法是使用反射,我们只是需要知道用户输入的函数名,不需要了解其中的细节,通过hasattr确定用户输入的函数名是否存在,再通过getattr获取到函数(写进内存),最后执行。这样就可以自动进入函数内寻找
以后再模块里添加函数也不麻烦

 

 

 

 

红色框框里是函数式编程
绿色框框里是面向对象编程
 这样看起来红色框框里的程序更方便些,但是在需要面向对象的时候绿色框框里的更方便些
理论上函数式编程一样能解决面向对象编程的问题,但是函数式编程显得繁琐。

 

类就是封装了某几个函数,在类里面称为方法。

 

  

 

 

创建对象就是在类名后面加个括号,更调用函数一样,然后这个新建的对象通过某个特殊的方法可以进入类里面调用相应的方法。

当我们调用类对象的时候,默认会执行__init__方法。这个方法有个名字叫:构造方法
这个self是个占位符,代表对象名。

可以把类当成工厂,创建一个个对象,可以通过其方法来修改对象的属性的值

 

下面这种是类的继承里最简单的功能.

 

python支持多继承,如果在出现同名的方法,优先从派生类,接着是到基类(如果有多个基类,则从左到右依次寻找)

 

当E类继承C和D类,而C类继承了A类,D类继承了B类的时候,其查找顺序如下图:

还是接上面的例子,如果A类和B类都继承了同一个基类,那么寻找顺序是A类下一个查找不是这个基类,而是D类,最后才到基类

 


当Foo这个类没有派生类

 

posted @ 2016-06-28 17:46  爬行的龟  阅读(349)  评论(0)    收藏  举报
如有错误,欢迎指正 邮箱656521736@qq.com