Python:类的模块本身是一个类吗?

时间:2015-08-14 08:24:52

标签: python oop

问题说明了一切。

F.e。 当你引用一个带有bge.types模块类的对象时,它会像bge.types.class一样读。

2 个答案:

答案 0 :(得分:0)

不,模块不是类。类构造主要用于定义类型,您可以通过调用它们来实例化类型。但是,您无法调用模块,也无法实例化它们。

您可以将模块视为单例:只能存在单个模块实例。

模块可以包含类型的成员,因此基本上模块可以包含类。

答案 1 :(得分:0)

令人惊讶的是,虽然模块类型本身是用C语言定义的,但它是一个类似于其他类型的类型,你甚至可以从它中继承它:

>>> import types
>>> types.ModuleType
<class 'module'>
>>> class C(types.ModuleType):
    def foo(self):
        print("hello")


>>> my_module = C('my_module')
>>> my_module
<module 'my_module'>
>>> 

对此的使用是严格限制的虽然我做了一些有趣的事情,但是我写了一些代码,它会用sys.modules中的一个类替换一个子类实例,该子类实例是原始模块的副本,但支持getattr

在正常使用中,只有一种模块类型:单个模块是模块类型的实例,而不是单独的类型。