Python - 访问子类'调用classmethods时来自父类的变量

时间:2012-11-07 22:40:15

标签: python oop class static

我正在尝试构建一个“迷你django模型”,用于处理Django和MongoDB而不使用norel Django的dist(我不需要ORM访问这些......)。

所以,我要做的是模仿django默认模型的标准行为或“实现”......这就是我到目前为止所做的:

文件“models.py”(基础)

from django.conf import settings
import pymongo

class Model(object):
    @classmethod
    def db(cls):
        db = pymongo.Connection(settings.MONGODB_CONF['host'], settings.MONGODB_CONF['port'])

    @classmethod
    class objects(object):
        @classmethod
        def all(cls):
            db = Model.db() #Not using yet... not even sure if that's the best way to do it
            print Model.collection

文件“mongomodels.py”(实现)

from mongodb import models

class ModelTest1(models.Model):
    database = 'mymongodb'
    collection = 'mymongocollection1'

class ModelTest2(models.Model):
    database = 'mymongodb'
    collection = 'mymongocollection2'

文件“views.py”(视图)

from mongomodels import ModelTest1, ModelTest2

print ModelTest1.objects.all() #Should print 'mymongocollection1'
print ModelTest2.objects.all() #Should print 'mymongocollection2'

问题是它不是从ModelTest1访问变量,而是从原始模型中访问......出了什么问题?

1 个答案:

答案 0 :(得分:0)

您必须为包含它的类提供objects某种链接。目前,您只需对其进行硬编码即可使用Model()的atttributes。因为您没有实例化这些类,所以您必须使用装饰器或元类在object的每个子类中为您创建Model()类。