Python类.key作为self.key存在,但不存在于self .__ dict__中

Wat*_*nMe 1 python arrays oop class

我的班级包含三个大词,一个出现在self.__dict__另外两个不是.

例:

class MyClass:
  big_matrix = {}
  side_array = {}
  map_of_data = {}
  def __init__( self ):
      # etc...
Run Code Online (Sandbox Code Playgroud)

当我试图转储self.__dict__到终端时,我成功地只看到了big_matrixnopt和其他的dicts.

没有一个数组声明__init__,稍后在其他函数中声明.

请帮帮我?

enr*_*cis 6

您应该初始化变量__init__并将它们分配给对象self,以使它们属于实例名称空间(在__dict__对象上调用时显示的名称空间).

否则它们不是对象实例名称空间的一部分,而是名称空间的一部分.

您可能big_matrix在实例命名空间中看到,因为您正在创建self.big_matrix类中的其他位置.


实例命名空间中的变量

class MyClass:
    def __init__( self ):
        self.big_matrix = {}
        self.side_array = {}
        self.map_of_data = {}
Run Code Online (Sandbox Code Playgroud)

变量属于实例名称空间:

>>> print MyClass().__dict__ 
{'big_matrix': {}, 'side_array': {}, 'map_of_data': {}}
Run Code Online (Sandbox Code Playgroud)

该类在其命名空间中没有任何变量

>>> print MyClass.__dict__
{}
Run Code Online (Sandbox Code Playgroud)

类命名空间中的变量

class MyClass:
    big_matrix = {}
    side_array = {}
    map_of_data = {}
Run Code Online (Sandbox Code Playgroud)

该实例的名称空间中没有任何变量:

>>> print MyClass().__dict__ 
{}
Run Code Online (Sandbox Code Playgroud)

所有变量都属于命名空间(以及类使用的其他变量):

>>> print MyClass.__dict__
{'big_matrix': {}, 'side_array': {}, '__module__': '__main__', 'map_of_data': {}, '__doc__': None}
Run Code Online (Sandbox Code Playgroud)