ORM是三个单词首字母组合而成,包含了Object(对象-类),Relations(关系),Mapping(映射)。解释过字面意思,但ORM的概念仍然模糊。私以为要理解一个事物,最好的法子是搞明白它出现是为了解决什么问题。
一个简单的ORM模型我们也可以通过元类来实现自己的ORM。下面将涉及两个知识点:元类,描述符。
首先完成属性描述符的设计:class BaseFiled(object): pass class CharFiled(BaseFiled): def __init__(self, max_len=10): self.max_len = max_len def __get__(self, instance, owner): return self.value def __set__(self, instance, value): if isinstance(value, str): # 判断类型进行控制 if len(value) <= self.max_len: self.value = value else: raise TypeError('超出最大长度') else: raise TypeError('need a str') def __delete__(self, instance): self.value = None class IntFiled(BaseFiled): def __init__(self, max_len=10): self.max_len = max_len def __get__(self, instance, owner): return self.value def __set__(self, instance, value): if isinstance(value, int): # 判断类型进行控制 if len(str(value)) <= self.max_len: self.value = value else: raise TypeError('超出最大长度') else: raise TypeError('need a int') def __delete__(self, instance): self.value = None class BoolFiled(BaseFiled): def __init__(self, max_len=10): self.max_len = max_len def __get__(self, instance, owner): return self.value def __set__(self, instance, value): if isinstance(value, bool): # 判断类型进行控制 self.value = value else: raise TypeError('need a bool')