小编Pyt*_*hio的帖子

如何做类似 Django 模型的元类技巧

我正在为我的研究项目制作类似 Django 的 ORM,因为我们不允许使用现有的 ORM(如果你想使用它,你必须自己编写代码)并且只是为了教育自己,我认为同样类型的 ORM 就像在 Django 中会很好。

在 ORM 中,我不想使用与 Django 中实现相同的风格来定义模型。IE。

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

Django 使用元类,在我的项目中我也在使用,但我对元类构造类而不是实例这一事实有疑问,因此所有属性都是类属性并在所有实例之间共享。

这是我尝试过的通用示例,但由于我之前所说的,它不起作用:

def getmethod(attrname):
    def _getmethod(self):
        return getattr(self, "__"+attrname).get()
    return _getmethod

def setmethod(attrname):
    def _setmethod(self, value):
        return getattr(self, "__"+attrname).set(value)
    return _setmethod

class Metaclass(type):
    def __new__(cls, name, based, attrs):
        ndict = {}
        for attr in attrs:
            if isinstance(attrs[attr], Field):
                ndict['__'+attr] = attrs[attr]
                ndict[attr] = property(getmethod(attr), setmethod(attr))
        return super(Metaclass, cls).__new__(cls, name, based, ndict)


class Field:
    def __init__(self):
        self.value …
Run Code Online (Sandbox Code Playgroud)

python django orm metaclass

4
推荐指数
1
解决办法
1449
查看次数

标签 统计

django ×1

metaclass ×1

orm ×1

python ×1