我有两个问题.
>>> class One(object):
... pass
...
>>> class Two(object):
... pass
...
>>> def digest(constr):
... c = apply(constr)
... print c.__class__.__name__
... print constr.__class__.__name__
...
>>> digest(Two)
Two
type
如何创建对象’Two’? constr()或c()都不起作用;似乎apply将它变成了一种类型.
将类和实例传递给方法时会发生什么?
最佳答案
How would one create object ‘Two’?
Neither constr() or 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的答案)肯定不会将第二类变成一个类型:它已经是一个.
>>> class Two(object): pass
...
>>> type(Two)
<type 'type'>
类是第一类对象:它们是类型的实例.如果你看下一个例子,这是有道理的.
>>> two = Two()
>>> type(two)
<class '__main__.Two'>
您可以看到一个类非常清楚地作为一个类型运行,因为它可以从类型返回.这是另一个例子.
>>> Three = type('Three', (Two, ), {'foo': 'bar'})
>>> type(Three)
<type 'type'>
>>> three = Three()
>>> type(three)
<class '__main__.Three'>
您可以看到该类型是可以实例化的类.它的构造函数有三个参数:类的名称,基类的元组和包含类属性的字典.它返回一个新类型aka类.
至于你的最后一个问题,
What happens when you pass a class
rather and an instance into a method?
你必须更加具体.类只是类型的实例,因此是第一类对象.询问如果我将一个类传递给一个方法会发生什么,就像问我将一个整数传递给一个方法会发生什么:它完全取决于该方法的期望.