Considera questi due stili di codice che realizzano la stessa cosa:
Importazioni nidificate
common.models
from django.db.models import *
class SmallAutoField(fields.AutoField):
def db_type(self, connection):
return "smallserial"
myapp.models
:
from common import models
class Test(models.Model):
id = models.SmallAutoField()
test = models.IntegerField()
Importazioni separate
common.models
from django.db import models
class SmallAutoField(models.fields.AutoField):
def db_type(self, connection):
return "smallserial"
myapp.models
:
from django.db import models
from common import models as my_models
class Test(models.Model):
id = my_models.SmallAutoField()
test = models.IntegerField()
So quale versione preferisco stilisticamente, ma quale versione è il modo corretto per farlo e perché?
Per quanto riguarda le prestazioni: ho provato a impostare la versione annidata, ma ciò non è possibile perché SyntaxError: import * only allowed at module level
. Quindi, c'è un altro modo per confrontare questo metodo?
Bytecode come riferimento, ma non sembra molto indicativo:
>>> dis.dis('from django.db.models import *')
1 0 LOAD_CONST 0 (0)
3 LOAD_CONST 1 (('*',))
6 IMPORT_NAME 0 (django.db.models)
9 IMPORT_STAR
10 LOAD_CONST 2 (None)
13 RETURN_VALUE
>>> dis.dis('from django.db import models')
1 0 LOAD_CONST 0 (0)
3 LOAD_CONST 1 (('models',))
6 IMPORT_NAME 0 (django.db)
9 IMPORT_FROM 1 (models)
12 STORE_NAME 1 (models)
15 POP_TOP
16 LOAD_CONST 2 (None)
19 RETURN_VALUE