Numpy函数/方法没有括号说明

时间:2017-02-17 20:27:05

标签: python numpy methods properties

我只是想绕过这里的语法:

# some data
import numpy as np
x = linspace(0, 1, 100)

x.sum()    # works with brackets
> 50.0

x.shape    # works without brackets
> (100,)

x.shape()  # fails with brackets
> TypeError

为什么有些方法/功能有括号,而有些方法/功能没有?

1 个答案:

答案 0 :(得分:3)

当您访问实例的属性时,您真正访问了描述符。有三种常见情况:

  • 描述符返回类似x.sum的函数,它返回一个绑定函数。绑定,因为该函数的第一个参数将是x。你显然需要调用()函数来给你一个结果。

  • 有类和实例属性,只返回保存在x.__dict__x.__class__.__dict__中的值。你不需要打电话给任何东西来获得这些。但是x.shape不是其中之一!

  • properties,当您访问这些内容时,隐式会调用您班级的方法。在一般属性中,比如说x.something,等同于x.__class__.something.fget(x)。看起来很奇怪,但有点......重要的是,您通常不需要直接调用(),因为您可以x.something

但这是技术性的,也许更简单的解释更好记住:

  • sum是一种方法。应该调用方法。要调用函数或方法,您需要()
  • shape是属性(但也可以是属性),您无需调用它们!它也可以返回一个函数,但在这种情况下,它返回一个tuple,你不能调用tuple实例。