我的理解是使用语法:
from foo import y
将从foo.py。
导入类y如果确实如此,那么当我使用以下内容时:
models.py
from django.db import models
from .utils import codeGenerator, createShortcode
class KirrUrlManager(models.Manager):
def all(self, *args, **kwargs):
qs_main = super(KirrUrlManager, self).all(*args, **kwargs)
qs = qs_main.filter(active=True)
return qs
def refreshShortCodes(self):
qs = KirrUrl.objects.filter(id__gte=1) #id_gte is primary key
newCodes = 0
for q in qs:
q.shortcode = createShortcode(q)
q.save()
newCodes +=1
return "new codes made: {i} ".format(i=newCodes)
class KirrUrl(models.Model):
url = models.CharField(max_length=220, unique=True)
shortcode = models.CharField(max_length=50, unique=True, blank = True)
timestamp = models.DateTimeField(auto_now=True,)
timestamp = models.DateTimeField(auto_now_add=True,)
active = models.BooleanField(default=True,)
objects = KirrUrlManager()
def save(self, *args, **kwargs):
if self.shortcode is None or self.shortcode =="":
self.shortcode = createShortcode(self)
super(KirrUrl, self).save(*args, **kwargs)
def __str__(self):
return str(self.url)
foo.py
from django.core.management.base import BaseCommand, CommandError
from shortener.models import KirrUrl
class Command(BaseCommand):
help = "refreshes all shortcodes"
def handle(self, *args, **options):
return KirrUrl.objects.refreshShortCodes()
我不确定为什么我能够调用方法" refreshShortCodes()"在foo.py.我只使用import语句"来自shortener.models导入KirrUrl"。难道这个import语句只允许我导入KirrUrl类吗? refreshShortCodes()不是KirrUrl类的一部分,但它是要导入的models.py文件。
答案 0 :(得分:3)
这个import语句是否只允许我导入KirrUrl类?
是的,这正是KirrUrl
语句正在做的事情。 import
是 objects.refreshShortCodes()
类的一部分。因此,您可以访问类名及其属性。
当Python导入一个类时,它会导入整个类对象。这意味着可以访问类名称空间中定义的所有变量和方法。因此,由于您在KirrUrl
类中创建了KirrUrlManager()
的实例,因此您可以首先获取KirrUrl
实例来访问refreshShortCodes()
方法:
KirrUrlManager()
然后从KirrUrl.objects
实例获取refreshShortCodes()
方法:
KirrUrlManager()
答案 1 :(得分:2)
您只需要导入该类即可访问其属性;你无法导入封装在类中的对象。
因此,在导入类...
<service android:name=".MyBackgroundService" android:process=":remote" />
<service android:name="org.eclipse.paho.android.service.MqttService" android:process=":remote" >
...
之后,可以通过类访问模型管理器KirrUrl
,并且可以通过模型管理器实例同样访问方法objects
。班refreshShortCodes
。
这是访问导入机制不可达的对象的方法之一;点引用。