我的课程有3个大字典,一个出现在self.__dict__中,另外两个则没有。

例:

class MyClass:
  big_matrix = {}
  side_array = {}
  map_of_data = {}
  def __init__( self ):
      # etc...


在尝试将self.__dict__转储到终端时,我成功地仅看到了big_matrix并提示了其他命令。

以后,在__init__中没有声明任何数组,在其他函数中也没有声明它。

请帮帮我?

最佳答案

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

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

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



实例名称空间中的变量

class MyClass:
    def __init__( self ):
        self.big_matrix = {}
        self.side_array = {}
        self.map_of_data = {}


变量属于实例名称空间:

>>> print MyClass().__dict__
{'big_matrix': {}, 'side_array': {}, 'map_of_data': {}}


该类的名称空间中没有任何变量

>>> print MyClass.__dict__
{}




类名称空间中的变量

class MyClass:
    big_matrix = {}
    side_array = {}
    map_of_data = {}


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

>>> print MyClass().__dict__
{}


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

>>> print MyClass.__dict__
{'big_matrix': {}, 'side_array': {}, '__module__': '__main__', 'map_of_data': {}, '__doc__': None}

关于python - Python类。键作为self.key存在,但不存在于self .__ dict__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25248372/

10-10 18:21
查看更多