我想知道类型的__new__
函数如何工作,如何使用attr参数创建一个类。
例如:
class ModelMetaclass(type):
def __new__(cls, name, bases, attrs):
return type.__new__(cls, name, bases, attrs)
class User(Model):
__metaclass__ = ModelMetaclass
id = StringField(primary_key=True, ddl='varchar(50)')
email = StringField(ddl='varchar(50)')
password = StringField(ddl='varchar(50)')
class StringField(Field):
def __init__(self, **kw):
self.name = kw.get('name', None)
self.primary_key = kw.get('primary_key', False)
self.ddl= kw.get('ddl', '')
然后,您可以像这样使用User类: u =用户(id = 10190,name ='Michael',email ='orm @ db.org') 打印类型(u.id)
那么,__new__
函数如何将StringField转换为str?
答案 0 :(得分:0)
__new__
函数如何将StringField
转换为str
?
简短回答:它没有 - 至少不在您发布的代码段中。此外,StringField
是 class 属性,而非实例属性,因此self.id
不一定是User.id
。
现在您没有发布所有相关代码(我们需要至少查看完整的ModelMetaclass
,Model
类和Field
类代码),也不提及任何提及这段代码来自哪里,所以很难确切地说出这里发生了什么。我假设这里发布的内容比你在这里发布的要多得多,而FWIW Field
可能是一个描述符,或者整个事情可以像Django的Model
和ModelField
那样工作(ModelField
用于ORM部分,但匹配的Model
实例属性只是普通的实例属性。)