2016-02-11 41 views
-1

我想知道类型的__new__函数是如何工作的,它如何使用attr参数创建一个类。python如何使用__new __()函数的参数列表中的属性创建类?

例如:

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,名称= '迈克尔',email='[email protected]') 打印类型(u.id)

那么,__new__函数如何将StringField转换为str?

回答

0

怎样的__new__功能转化成StringFieldstr

简短回答:它不 - 至少不在您发布的代码段中。此外,StringField s是类别属性,而不是实例属性,因此self.id不一定是User.id

现在你没有张贴所有相关的代码(我们需要至少看到完整ModelMetaclass,在Model类和Field类代码),也不是这里的代码来自任何提及,所以很难确切地说出发生了什么。我认为这里的内容比你在这里发布的要多,并且FWIW Field可能是一个描述符,或者整个事情可能像Django的ModelModelField一样工作(其中ModelField用于ORM部分,但匹配的Model实例属性只是普通实例属性)。

相关问题