Python的笔试题网上能搜出N个版本,Django的却不多。
这套题我觉得出的挺好的(某公司的笔试的部分题目),难易适中,可以考察笔试者对于框架的理解和使用熟练度,展开了问,也可以问到很深的地方。
如果有什么疏漏,欢迎留言探讨。
顺便复习OOP思想,继承是面向对象的大前提╮(╯▽╰)╭,抽象类,之所以被创建是用来被继承的;一个类如果包含任何一种抽象方法,那么它就是抽象类;抽象方法一定要在子类中被复写;在继承关系中,抽象类永远在树枝节点上……扯远了,而且对于Python来说,已经没有这么多约束了。
回到Django的Model,也一样,当我们需要某些公共方法字段时,就需要一个父类为其他子类服务,这个父类没有manager,Django也不为这个类创建表,这种继承的定义方法如下:
| 123456789101112 | class Animal(models.Model): name = models.CharField(max_length=50) age = models.PositiveIntegerField() # 下面这句决定了Animal是一个抽象类/Model class Meta: abstract = True class Human(Animal): kind_hearted = models.BooleanField() sex = models.CharField(\’sex\’, choices=((\’m\’,\’male\’), (\’f\’, \’female\’)), max_length=1) #… |
上例中,我们的Human子model中,自然包含了name和age的字段,但是Animal不能作为正常model使用,由于没有manager,所以也不能实例化、保存。在子类中,不可以建立与这个抽象父类中的相同的字段,Django表示对报错负责。
和抽象继承的主要区别是父类这时也可以拥有数据库表了,并且不在身为存储公共信息的抽象类了,父类也可以进行实例化,查询等操作了。
| 1234567 | class Country(models.Model): name = models.CharField(max_length=10) #… class Province(Country): return = models.BooleanField() #… |
即在子类中只能增加方法,而不能增加属性,在不影响父类数据存储的前提下,使子类继承父类,此时子类称为父类的“代理”。例如:
| 123456789101112131415 | from django.contrib.auth.models import User class Person(User): # this makes a class proxy proxy = True def can_dance(self): return True # both Yellow and Black can_dance
相关内容
|