1、@classmethod
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
class A(object):
bar = 1
def func1(self):
print ('foo')
@classmethod
def func2(cls):
print ('func2')
print (cls.bar)
cls().func1() # 调用 foo 方法
A.func2() # 不需要实例化
2、嵌套类
import os, sys
class parent:
def __init__(self):
self.name = 'parent'
def getName(self):
print self.name
class child:
def __init__(self):
self.name = 'child'
def getName(self):
print self.name
if __name__ == '__main__':
child = parent.child()
child.getName()
如何访问到父类的name值
- 1
class parent:
name = 'parent'
def getName(self):
print(self.name)
class child:
def getName(self):
return parent.name
if __name__ == '__main__':
child = parent.child()
child.getName()
- 2
#或者先实例化parent然后传参进去
class parent:
def __init__(self):
self.name = 'parent'
def getName(self):
print(self.name)
class child:
def __init__(self,parent):
self.parent = parent
def getName(self):
return self.parent.name
if __name__ == '__main__':
parent = parent()
child = parent.child(parent)
child.getName()
3、Django( class Meta:)嵌套类
Class Meta 作用:使用内部类来提供一些metadata,以下列举一些常用的meta:
- 1,abstract:如下段代码所示,将abstract设置为True后,CommonInfo无法作为一个普通的Django模型,
而是作为一个抽象基类存在,作用 是为其他的类提供一些公有的属性。如Student会拥有三个属性,即name,age,home_group。利于公用信息的分解,避免重复编码。
from django.db import models
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
age = models.PositiveIntegerField()
class Meta:
abstract = True
class Student(CommonInfo):
home_group = models.CharField(max_length=5)
- 2,db_table:指定model对应数据库的表名
建议的格式为“this_is_table_name”,即小写加下划线的格式。若不指定也可 以,Django会自动生成相应的表名,但是,自动生成的表名的可读性就不能够保证了。
class MainWheel(Main):
# 轮播banner
class Meta:
db_table = 'axf_wheel'
- 3,ordering:排序操作,
例如我们需要根据date字段来进行升序排列,则为ordering=[‘date’],若为降序排列,则设置为ordering=[’-date’],应该注意到的是,ordering是个列表的表现形式,说明是可以接其他字段的,比如ordering=[’-date’,‘name’],则表示先按date进行降序排列,再按名字进行升序排列。
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
class Meta:
ordering = ['order_date']
# 按订单升序排列
- 4,unique_together:在数据进行写表操作的时候,
我们往往会遇到两个字段组合起来需要唯一的情况,例如IP和port,往往是唯一存在的,这个时候,unique_together就很有用了,可以设置成 unique_together = ((“ip”, “port”),)当然了,若该model中只有这两个字段需要做唯一性验证,也可以使用单个元组进行设置,即unique_together =(“ip”, “port”),是不是很灵活?