我正在浏览https://github.com/hit9/CURD.py/blob/master/CURD.py的代码,这是一个执行正常curd操作的简单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)做什么?我用Google搜索但没有找到任何内容。
答案 0 :(得分: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
设置为模型的描述。或类似的东西。
答案 1 :(得分:2)
这不是蟒蛇标准的东西。
循环遍历类的名称和值,并且作为Field
类型实例的该类的属性被添加到字典中。
Field
不是python标准库的一部分,您应该在该项目中搜索Field
类。