1.元类
左边元类,中间类,右边实例
其实记住的只是一点:python里一切都是对象,实例是对象,类是对象,元类也是对象.
这里题主说的类和对象其实是包含和被包含的关系了.
那么Python里的类和其他的对象有什么区别?
实例是对象,因为创建实例的是类.类是对象,创建类的是什么呢?Python给的答案就是元类.你可以通过type()函数来查看它的元类.(type(type)得到的是它自己)
理解:元类(创建 是程序内部实现的)类 (创建 是程序员实现的)实例对象
类定义:在python中,把具有相同属性和方法的对象归为一个类(class)
2.Python中单下划线和双下划线
1. _xxx 不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
2、__xxx 双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以(通过get set)
3、__xxx___ 定义的是特列方法。像__init__之类的
3.迭代器和生成器
迭代器指出容器中的一个特定位置。 迭代器就如同一个指针
按照鸭子模型理论,生成器就是一种迭代器,可以使用for进行迭代。
第一次执行next(generator)时,会执行完yield语句后程序进行挂起,所有的参数和状态会进行保存。
· 再一次执行next(generator)时,会从挂起的状态开始往后执行。
在遇到程序的结尾或者遇到StopIteration时,循环结束。
可以通过generator.send(arg)来传入参数,这是协程模型。
可以通过generator.throw(exception)来传入一个异常。throw语句会消耗掉一个yield。
可以通过generator.close()来手动关闭生成器。
next()等价于send(None)
4.重载 重写
重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法
函数重载主要是为了解决两个问题。
1. 可变参数类型。
2. 可变参数个数。
python是弱类型语言,不支持重载,没有多大意义
5.OOP与AOP的区别
OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
AOP(面向切面编程)则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
6.单例模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象
在 Python 中,我们可以用多种方法来实现单例模式:
使用模块
使用 __new__
使用装饰器(decorator)
使用元类(metaclass)
代码:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kw):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
return cls._instance
class MyClass(Singleton):
a = 1
优点
一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
缺点
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
7.python作用域
http://python.jobbole.com/86465/
作用域顺序:LEGB
L:local 函数内部作用域
E:enclosing 函数内部与内嵌函数之间
G:global 全局作用域
B:build-in 内置作用域
8.闭包
https://www.cnblogs.com/cxying93/p/6103375.html
在本质上,闭包是将函数内部和函数外部连接起来的桥梁
要理解闭包,首先要理解javascript的特殊的变量作用域。
变量的作用域无非就两种:全局变量和局部变量。
javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。
注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!
9.匿名函数优点:
- 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
10.深拷贝,浅拷贝
http://blog.csdn.net/u014745194/article/details/7027186
浅拷贝:我只复制我需要的一部分
深拷贝:我会把全部复制过来
10.Python里面search()和match()的区别?
match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
11.有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
工具:PyChecke
https://zhidao.baidu.com/question/1116375698544834299.html
12.如何在一个function里面设置一个全局的变量?
答:解决方法是在function的开始插入一个global声明:
def f()
global x
12:Ajax
http://www.w3school.com.cn/ajax/ajax_intro.asp
13.三次握手 和 四次挥手
https://www.cnblogs.com/thrillerz/p/6464203.html
14.TCP和UDP的区别
http://blog.csdn.net/air_hjj/article/details/70791852
15.Django 和 Tornado 的关系、差别
http://blog.csdn.net/dimples_54/article/details/78025731
16.静态链接和动态链接的区别
http://blog.csdn.net/lisongjia123/article/details/49003159
17.分页和分段的区别
https://wenku.baidu.com/view/7f4bc2d2b14e852458fb57a5.html