Python反射和可调用对象
我有两个问题.
>>> 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将它变成了一种类型. 将类和实例传递给方法时会发生什么? 解决方法
以上评论是针对此代码做出的: >>> 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类. 至于你的最后一个问题,
你必须更加具体.类只是类型的实例,因此是第一类对象.询问如果我将一个类传递给一个方法会发生什么,就像问我将一个整数传递给一个方法会发生什么:它完全取决于该方法的期望. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |