什么转向__builtin__?

时间:2014-06-19 14:27:38

标签: python metaclass built-in

我有以下代码段和输出

with metaclass:

def some(*args):
    return type(args)

__metaclass__ = some

class Foo:
   a = 'khkjh'


print Foo.__module__

输出:__builtin__

without metaclass:

class Foo:
   a = 'khkjh'

print Foo.__module__

输出:__main__

所以,

什么是__builtin__

元类的原因或方式如何影响它?

1 个答案:

答案 0 :(得分:1)

__builtin__是提供所有内置函数,异常等的模块。

您从__module__返回此内容,因为您提供的元类基本上将Foo转换为tuple类型:

>>> def some (*args):
...  return type(args)  # This returns <type 'tuple'>
...
>>> class Hmm(object):
...  __metaclass__ = some
... 
>>> class Foo(object):
...  pass
... 
>>> print Hmm
<type 'tuple'>
>>> print Foo
<class '__main__.Foo'>
>>> print tuple
<type 'tuple'>
>>> print tuple.__module__
__builtin__

正如您所看到的,Hmm现在是tuple类型。 tuple模块提供了__builtin__类型,因此您看到了输出。