加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python反射和可调用对象

发布时间:2020-12-20 11:15:54 所属栏目: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)Twotype 如何创建对象’Two’? constr()或c()都
我有两个问题.

>>> 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?

你必须更加具体.类只是类型的实例,因此是第一类对象.询问如果我将一个类传递给一个方法会发生什么,就像问我将一个整数传递给一个方法会发生什么:它完全取决于该方法的期望.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读