如何创建对象“Two”?
neither constr() nor c() work; and it seems that apply turns it into a type.
上述评论是针对以下代码的:
>>> def digest(constr):
... c = apply(constr)
... print c.__class__.__name__
... print constr.__class__.__name__
apply
(已弃用:请参见@pyfunc的答案)确实不会将类Two
转换为类型:它已经是一个类型。
>>> class Two(object): pass
...
>>> type(Two)
<type 'type'>
类是一等对象:它们是type
的实例。如果查看下一个示例,这就有意义了。
>>> two = Two()
>>> type(two)
<class '__main__.Two'>
你可以清楚地看到类作为一种类型的功能,因为它可以从type
返回。这是另一个例子。
>>> Three = type('Three', (Two, ), )
>>> type(Three)
<type 'type'>
>>> three = Three()
>>> type(three)
<class '__main__.Three'>
你可以看到
type
是可实例化的类。它的构造函数接受三个参数: 类名,一个基类元组和包含类属性的字典。它返回一个新的
type
即类。
至于您的最后一个问题,
引用:
“当您将类而不是实例传递到方法中时会发生什么?”
你需要更具体一些。类只是
type
的实例,因此是一级对象。如果我将类传递给方法,就像问如果我将整数传递给方法会发生什么一样:这完全取决于方法期望什么。