2009-12-08 59 views
1

部分代码。“type”的第一个参数是做什么的?

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在这里做的第一个参数是什么?

回答

2

它设置创建的类的__name__属性。

当你说:

class B(object): 

发生两件事情与 'B':

  • 名称 'B' 被分配的类。这就像如果你说“B = ...”。

  • 该类的__name__属性设置为'B'。

当您手动调用类型构造函数时,只完成后半部分。如果您没有将结果赋值给'B',那么B将保持原来的设置(或未设置)。

注意,类似的结果可以说获得:

class B(object): 
    pass 
A = B 
del B 

现在指的是自称为“B”类和B并未提及任何东西。

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

typehere第二种形式获取更多信息。

当您将调用type的结果分配给一个变量时,您只需将类别B赋予另一个名称即可。这相当于做

>>> class B(object): 
...  pass 
... 
>>> A = B 
>>> a = A() 
>>> b = B() 
0

“B”仅仅是一个字符串,它是一个 一个地方使用它的名字将作为类的默认__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> 
>>> 
阻止你
相关问题