一些代码。
In [1]: A = type('B', (), {})
In [2]: a = A()
In [3]: b = B()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/home/shabda/<ipython console> in <module>()
NameError: name 'B' is not defined
type
在这里做的第一个参数是什么?
答案 0 :(得分:2)
它正在设置已创建类的__name__
属性。
当你说:
class B(object):
'B'会发生两件事:
名称'B'被分配了类。这就像你说“B = ...
”一样。
该类的__name__
属性设置为“B”。
手动调用类型构造函数时,只完成后半部分。如果你没有将结果分配给'B',那么B将保持原样(或未设置),如前所述。
请注意,可以通过以下方式获得类似的结果:
class B(object):
pass
A = B
del B
现在A指的是一个自称为'B'的类,B不指任何东西。
答案 1 :(得分:0)
它正在创建一个名为B
的新类:
Python 2.5.4 (r254:67916, Nov 19 2009, 22:14:20)
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> type('B', (), {})
<class '__main__.B'>
有关详细信息,请参阅type
here的第二种形式。
当您将调用type
的结果分配给变量时,您只是给类B
另一个名称。这相当于做
>>> class B(object):
... pass
...
>>> A = B
>>> a = A()
>>> b = B()
答案 2 :(得分:0)
'B'只是一个字符串,是A的名字
它使用的一个地方是默认的__repr__
类及其对象
>>> A=type('B', (), {})
>>> A
<class '__main__.B'>
>>> a=A()
>>> a
<__main__.B object at 0xb7cf88ec>
创建类的常用方法无法显式设置__name__
属性。
在这种情况下,它由类构造函数
>>> class A:pass
...
>>> A
<class __main__.A at 0xb7cf280c>
但是之后没有什么能阻止你更改名字
>>> A.__name__
'A'
>>> A.__name__='B'
>>> A
<class __main__.B at 0xb7cf280c>
>>>