【问题标题】:what's the difference between dir(self) and self.__dict__ [duplicate]dir(self) 和 self.__dict__ 有什么区别 [重复]
【发布时间】:2012-11-09 05:59:52
【问题描述】:

可能重复:
inspect.getmembers() vs __dict__.items() vs dir()

class Base():
    def __init__(self, conf):
        self.__conf__ = conf
        for i in self.__dict__:
            print i,"dict"
        for i in dir(self):
            print i,"dir"

class Test(Base):
      a = 1
      b = 2

t = Test("conf")

输出是:

__conf__ dict
__conf__ dir
__doc__ dir
__init__ dir
__module__ dir
a dir
b dir

谁能解释一下?

【问题讨论】:

  • 我不确定您是如何获得该输出的。 dictdir 来自哪里?
  • @kindall 我刚刚修复了代码,print i,"dict"print i, "dir"
  • 据我所知,__conf__在python中没有特殊含义。您不应该使用变量(或属性)名称__something__,除非您将它用于 python 标准赋予的特殊含义,因为这些变量是 保留 用于未来版本的 python。
  • 家族中另一个有用的功能是vars。当遇到我以前从未见过的class 时,我会同时使用dir(t)vars(t) 来发出声音。
  • 提问前请search

标签: python class


【解决方案1】:

对象的__dict__ 存储实例的属性。您的实例的唯一属性是 __conf__,因为它是您的 __init__() 方法中唯一设置的一个。 dir() 返回实例、其类及其父类的“有趣”属性名称列表。其中包括来自Test 类的ab 和来自Base 类的__init__,以及Python 自动添加的一些其他属性。

类属性存储在每个类的__dict__中,所以dir()所做的就是遍历继承层次并从每个类中收集信息。

【讨论】:

  • 很好的答案,尤其是第一部分。有关“实例的有趣属性”的详细说明,请参阅this answer
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多