为什么 dir 不显示所有 Python 对象属性?

2023-12-23

为什么当我调用时某些对象方法/属性不显示dir在物体上?

Example:

from scipy import sparse
e = sparse.eye(2)
'H' in dir(e)

returns False。但打电话e.H工作得很好(返回另一个稀疏矩阵对象)。为什么会这样,我怎样才能看到这些隐藏的属性?

我正在使用Python 3.5.1。


e.H, e.A, e.T是稀疏矩阵对象的伪属性。

shape是一个属性。在sparse.base.py I find

shape = property(fget=get_shape, fset=set_shape)

dict仅包含:

In [121]: e.__dict__
Out[121]: 
{'_shape': (2, 2),
 'data': array([[ 1.,  1.]]),
 'format': 'dia',
 'maxprint': 50,
 'offsets': array([0])}

get_shape可能访问_shape. set_shape可能限制我们改变的能力_shape.

我不知道有什么巧妙的方法可以找到这样的对象的所有定义属性。理想情况下,它们应该列在文档中,但是sparse文档并不理想。

有一个e.getH方法,它返回与e.H,所以我怀疑有一段代码,可能在某个超类中

H = property(fget=getH)

不 - 在sparse.base.py我找到了重新定义__getattr__,所以这是一个完全不同的机制(不是属性,也不是__dict__):

def __getattr__(self, attr):
    if attr == 'A':
        return self.toarray()
    elif attr == 'T':
        return self.transpose()
    elif attr == 'H':
        return self.getH()
    elif attr == 'real':
        return self._real()
    elif attr == 'imag':
        return self._imag()
    elif attr == 'size':
        return self.getnnz()
    else:
        raise AttributeError(attr + " not found")

In ipython我可以用以下方法获取这个In [152]: e.__getattr__?? or sparse.base??.

getattr可用于获取所有这些属性和属性(和方法)

In [161]: getattr(e,'shape')
Out[161]: (2, 2)

In [162]: getattr(e,'_shape')
Out[162]: (2, 2)

In [163]: getattr(e,'H')
Out[163]: 
<2x2 sparse matrix of type '<type 'numpy.float64'>'
    with 2 stored elements in Compressed Sparse Column format>

In [164]: getattr(e,'transpose')
Out[164]: 
<bound method dia_matrix.transpose of <2x2 sparse matrix of type '<type 'numpy.float64'>'
    with 2 stored elements (1 diagonals) in DIAgonal format>>

随着inspect我可以获得模块列表members, e.g.

[i[0] for i in inspect.getmembers(e)]

但这仍然没有列出这些特殊的定义__getattr__ method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 dir 不显示所有 Python 对象属性? 的相关文章

随机推荐

  • urllib2.HTTPError:HTTP 错误 403:禁止

    我正在尝试使用 python 自动下载历史股票数据 我尝试打开的 URL 以 CSV 文件响应 但我无法使用 urllib2 打开 我曾尝试按照之前几个问题中指定的方式更改用户代理 我什至尝试接受响应 cookie 但没有成功 你能帮忙吗
  • Nuxt.js Hackernews API 更新帖子,每分钟无需加载页面

    我有一个 nuxt js 项目 https github com AzizxonZufarov newsnuxt2 https github com AzizxonZufarov newsnuxt2我需要每分钟更新 API 的帖子而不加载页
  • pandaboard 上静态链接的 OpenCV 编译问题

    我使用 BUILD SHARED LIBS 0 选项在 pandaboard 上安装了带有静态链接的 opencv 我使用的是ubuntu 11 10 我还构建了第 3 方库 png jpeg jasper 和 zlib cmake 选项
  • `std::make_pair` 中的 c++11 右值引用

    对于 C 98 template
  • SolrJ 线程安全

    我在 Web 应用程序中使用 CommonsHttpSolrServer 在多个请求中重用 CommonsHttpSolrServer 是否安全 还是应该为每个请求实例化一个新对象 无法在 API 文档中找到答案 根据文档 http wik
  • 从用户输入中读取整数

    我正在寻找的是如何读取用户从命令行 控制台项目 给出的整数 我主要了解 C 并开始走 C 道路 我知道 Console ReadLine 只需要一个字符 字符串 简而言之 我正在寻找它的整数版本 只是为了让您了解我正在做什么 Console
  • Google Calendar API 阻止 Django 启动

    我有一个 Django 1 9 1 项目 它工作得很好 直到我添加了提供的代码Google 日历 API 文档 https developers google com google apps calendar quickstart pyth
  • C++ 中未评估的上下文是什么?

    我经常想到的一个例子是 sizeof表达式 它不计算表达式 而是通过静态类型确定大小 例如 int func sizeof func 这是我的思维极限 所以如果还有其他未评估的上下文 那么它们是什么呢 幸运的是 该标准有一个方便的列表 5
  • 在 ASP.Net 中为不同的会话变量设置不同的超时

    是否可以为 ASP Net 中的不同会话设置不同的超时 Edited我的意思是 在同一页面中我有 2 个会话变量 Session ss1 和 Session ss2 是否可以为每个会话设置超时 或者是否有做同样的事情 比如将会话保存到 co
  • 将int所有字节设置为(unsigned char)0,保证代表零?

    This is not a matter of recommended practise nor undefined behavior but about what the c standard actually guarantees in
  • 如何添加一个范围内的数字

    嘿 所以我想做一个挑战 将 1000 以内 3 或 5 的倍数的每个数字相加 当我输入以下代码时 for x in xrange 1000 if x 3 0 or x 5 0 place list x sum place 它只是列出了所有
  • 是否可以解析整个字符串?

    如你所知 JavaScript 的parseFloat函数仅在遇到无效字符之前起作用 例如 parseFloat 10 123 10 123 parseFloat 12 zzzz 12 parseFloat z12 NaN 有没有一种方法或
  • ngx-bootstrap typeahead 不显示下拉菜单

    我正在将一个应用程序从 AngularJS 迁移到 Angular 但我在新的 typeahead 实现上遇到了障碍 已经过去一天了 我尝试了几个 API 最后决定采用最相似的 API我在 AngularJS 版本中使用的是什么 this
  • 英特尔处理器:“如果 CPUID.06H:EAX.[7] = 1”是什么意思?

    英特尔处理器数据表中的以下注释是什么意思 如何在 Linux 中的驱动程序代码中检查这一点 如果CPUID 06H EAX 7 1 我在英特尔处理器的软件开发人员手册的寄存器描述表的注释栏中遇到了这种类型的语句 Ref https soft
  • 如何在 Go 中管理 Windows 用户帐户?

    我需要能够从 Go 应用程序管理 Windows 本地用户帐户 并且似乎如果不使用 CGo 就没有本机绑定 我最初的搜索让我发现人们说最好使用 exec Command 来运行 net user 命令 但在解析响应代码时这似乎很混乱且不可靠
  • 实体框架 - MySQL - 日期时间格式问题

    我有一个简单的表格 其中有几个日期字段 每当我运行以下查询时 var docs from d in base EntityDataContext document reviews select d ToList 我收到以下异常 Unable
  • 带有 UIImage 或远程 URL 的 UNNotificationAttachment

    In my Notification Service Extension我正在从 URL 下载图像以显示为UNNotificationAttachment在通知中 因此 我将此图像作为 UIImage 并且不需要将其写入光盘上的应用程序目录
  • 使用 Google UMP SDK 时 Admob TCF 错误

    我最近根据以下要求集成了 UMP SKD文档 https developers google com admob ump android quick start 现在我从 Adbmob 收到错误报告 其中指出许多广告请求由于错误 1 1 而
  • Swift 3 中的 SCNGeometryElement 设置

    我硬着头皮开始将我的应用程序转换为 Swift 3 一如既往 该转换器还有很多不足之处 在这种情况下 我不确定如何正确编码新版本 这是原文 let indexes CInt 0 1 2 3 let dat NSData bytes inde
  • 为什么 dir 不显示所有 Python 对象属性?

    为什么当我调用时某些对象方法 属性不显示dir在物体上 Example from scipy import sparse e sparse eye 2 H in dir e returns False 但打电话e H工作得很好 返回另一个稀