python 面试
来源:互联网 发布:服装数据分析软件 编辑:程序博客网 时间:2024/05/22 01:49
Dango model 几种继承形式
抽共享继承
- 不能等实例化,抽象方法必须在子类中实现,Django不对其建立对应的表。
class Animal(models.Model): name = models.CharField(max_length=50) age = models.PositiveIntegerField() # 下面这句决定了Animal是一个抽象类/Model class Meta: abstract = Trueclass Human(Animal): kind_hearted = models.BooleanField() sex = models.CharField('sex', choices=(('m','male'), ('f', 'female')), max_length=1) #...
正常继承
- 父类可以被实例化,Django也生成对应的表。
代理
- Django 的代理类不会生成对应的表,与父类公用一张表,并且代理类不能增加属性,只能增加方法。
from django.db import models# Create your models here.class Person(models.Model): name=models.CharField(max_length=8)class ProxyPerson(Person): class Meta: proxy=True def doSomething(self): pass# 定义了一个ProxyPerson类、proxy 和abstract 写法上并没有什么不一样;# 只是把abstract=True 变成proxy=True就行了
自定义manage类
# new managerclass OrderManager(models.Manager): def title_count(self, keyword): return self.filter(title__icontains=keyword).count()class Order(models.Models): title = models.CharField(max_length=100) # ... #objects = models.Manager() objects = OrderManager()#此处相当重写了计数函数 def __unicode__(self): return self.title
Django 级联删除
- 一个对象被对个对象当做外键引用,当删除指个对象后,默认把所有包含此对象外键的对象也删除,称作级联删除,为了避免级联删除,进行如下设置:
class Host(models.Model): hostname = models.CharField(max_length=20,primary_key=True, blank=False) static_ip = models.CharField(max_length=20,unique = True) class CCRole(models.Model): name = models.CharField(max_length = 20,primary_key = True) host = models.ForeignKey(Host,null=True,blank=True,on_delete=models.SET_NULL) # 增加了on_delete=models.SET_NULL这样就阻止了级联删除,但前提是null=True
Django日志
- 此处只使用一种作为示例
import loggingfrom django.db import modelsfrom django.db.models.signals import pre_savefrom django.dispatch import receiverclass Order(models.Model): # ...logger = logging.getLogger(__name__)@receiver(pre_save, sender=Order)def pre_save_handler(sender, **kwargs): # 我们可以在Order这个Model保存之前输出想要的信息了 logger.debug("{},{}".format(sender, **kwargs))
Django session & cookies
- 相对于session,cookies是不安全的,所以Django只在cookies中存放session_id,将重要的信息加密存到服务器端。
- session / cookies 操作
#给本地保存sessionrequest.session['order_id'] = order_id#删除sessiondel request.session['order_id']#读取sessionsession.get['order_id',False]
python 三种类方法
- 实例方法、类方法、静态方法
class A(object): def foo(self, x): print('实例方法,使用的时候必须传递实例,即这块的self') @classmethod def class_foo(cls, x): print ('类方法,使用的时候必须传递类对象,eg: A.class_foo(x)') @staticmethod def static_class(x): print ('静态方法')
python 自省
type()#输出对象类型dir()#输出对象的所有方法hasattr()#判断是否有属性isinstance(1,(int,float))#是否是某一类型
下划线
__foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突._foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.
*args and **kwargs
*args 作为函数参数意为参数为不确定数量的变量
**kwargs 作为函数的变量意为不确定的字典型变量
Python的单例模式
单例模式
python 闭包函数
-在Python中创建一个闭包可以归结为以下三点:
闭包函数必须有内嵌函数内嵌函数需要引用该嵌套函数上一级namespace中的变量闭包函数必须返回内嵌函数
闭包函数参考
函式编程与lambda
#coding:utf8#函数是编程+lambda#fileter是一个过滤器,输出100内的偶数print filter(lambda x:x%2==0 ,range(1,101))#map是对每一项依次调用函数print map(lambda x:x*x , [1,2,3])#reduce是对序列每一项进行迭代,改式子是计算100以内的和print reduce(lambda x,y:x+y ,range(1,101))#生成斐波那契数列f = [1,1]print [f.append(f[-1]+f[-2]) or f.pop(0) for i in range(100)]
copy deepcopy
- 简单总结:一般的直接赋值相当于把a开辟的内存地址传给另一个变量b,当在对a进行修改操作时候相当于在该内存中进行操作,所以b也随之变化。
- copy是仿照a也开辟一块内存将a中的值进行复制,不过当a中有数组时,c复制的也是内存地址,所以当a中的数组变化时候c中的数组也会变化。
- deepcopy是进行深层次的复制,将a里面的数组也进行了复制,不同于copy的复制内存地址,所以a怎么变都不会影响d。
import copya = [1, 2, 3, 4, ['a', 'b']] #原始对象b = a #赋值,传对象的引用c = copy.copy(a) #对象拷贝,浅拷贝d = copy.deepcopy(a) #对象拷贝,深拷贝a.append(5) #修改对象aa[4].append('c') #修改对象a中的['a', 'b']数组对象print 'a = ', aprint 'b = ', bprint 'c = ', cprint 'd = ', d输出结果:a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]c = [1, 2, 3, 4, ['a', 'b', 'c']]d = [1, 2, 3, 4, ['a', 'b']]
is ==
is 比较地址
== 比较值
match search
match 只匹配头部
search 匹配所有
阅读全文
0 0
- python面试
- python面试
- python面试
- python面试
- python 面试
- Python面试集锦
- python面试题目
- Python面试集锦
- python面试集锦
- python面试整理
- 20150530(Python面试)
- 20150610-Python面试
- python面试题目
- python面试问题题目
- python常见面试问题
- python 面试( interview )
- Python面试相关
- Python面试--编程题
- 一些实用的网站
- 浏览器history对象
- soj3427: Dark roads_最小生成树Kruskal
- 常见数据库连接池的配置
- [转]bootstrap-table文件汇总
- python 面试
- Echars简单地图制作
- C++学习笔记【第一部分第七章:类】
- Android数据存储之GreenDao 3.0 详解
- JavaScript中的标准对象
- ng-repeat指令在迭代对象时的去重
- exercise 3 (逻辑斯蒂回归实现多分类问题)
- 【java多线程 关键字】synchronized
- C++学习笔记---类