-1

我正在浏览https://github.com/hit9/CURD.py/blob/master/CURD.py的代码,这是一个执行正常凝乳操作的简单 orm .. 我无法理解部分代码这(在第 616 行):

 .....#smthing #..
 for name, attr in cls.__dict__.iteritems():
            if isinstance(attr, Field):
                attr.describe(name, cls)
                fields[name] = attr 

attr.describe(attr, Field) 是做什么的?我用谷歌搜索了它,但一无所获。

4

2 回答 2

5

它不是 Python 语言功能,而是该库上的一种方法。您可以在此处查看定义:

https://github.com/hit9/CURD.py/blob/master/CURD.py#L251

class Field(Leaf):
    """
    Field object.

    Field examples: User.name, User.age ..
    """

    def __init__(self, is_primarykey=False, is_foreignkey=False):
        self.is_primarykey = is_primarykey
        self.is_foreignkey = is_foreignkey

    # describe model's attr
    def describe(self, name, model):
        self.name = name
        self.model = model
        # fullname e.g. : User.id 's fullname is "user.id"
        self.fullname = self.model.table_name + "." + self.name
        # describe the attribute, reload its access control of writing, reading
        setattr(model, name, FieldDescriptor(self))

setattr设置对象的属性。因此,如果我调用describe("field_name", myObject),它将设置myObject.field_name为模型的描述。或类似的东西。

于 2013-10-28T14:57:59.227 回答
2

那不是python标准的东西。

循环遍历一个类的名称和值,并将作为类型实例的该类的属性Field添加到字典中。

Field不是 python 标准库的一部分,您应该在该项目中搜索Field该类。

于 2013-10-28T14:59:17.130 回答