title: Why pylint returns `unsubscriptable-object` for numpy.ndarray.shape?
body: <p>I just put together the following "minimum" repro case (minimum in quotes because I wanted to ensure <code>pylint</code> threw no other errors, warnings, hints, or suggestions - meaning there's a bit of boilerplate):</p>
  
  <p><strong>pylint_error.py</strong>:</p>
  
  <pre><code>"""
  Docstring
  """
  
  import numpy as np
  
  
  def main():
      """
      Main entrypoint
      """
      test = np.array([1])
      print(test.shape[0])
  
  
  if __name__ == "__main__":
      main()
  
  </code></pre>
  
  <p>When I run <code>pylint</code> on this code (<code>pylint pylint_error.py</code>) I get the following output:</p>
  
  <pre><code>$&gt; pylint pylint_error.py
  ************* Module pylint_error
  pylint_error.py:13:10: E1136: Value 'test.shape' is unsubscriptable (unsubscriptable-object)
  
  ------------------------------------------------------------------
  Your code has been rated at 1.67/10 (previous run: 1.67/10, +0.00)
  </code></pre>
  
  <p>It claims that <code>test.shape</code> is not subscriptable, even though it quite clearly is. When I run the code it works just fine:</p>
  
  <pre><code>$&gt; python pylint_error.py
  1
  </code></pre>
  
  <p>So what's causing <code>pylint</code> to become confused, and how can I fix it?</p>
  
  <p>Some additional notes:</p>
  
  <ul>
  <li>If I declare test as <code>np.arange(1)</code> the error goes away</li>
  <li>If I declare test as <code>np.zeros(1)</code>, <code>np.zeros((1))</code>, <code>np.ones(1)</code>, or <code>np.ones((1))</code> the error does <strong><em>not</em></strong> go away</li>
  <li>If I declare test as <code>np.full((1), 1)</code> the error goes away</li>
  <li>Specifying the type (<code>test: np.ndarray = np.array([1])</code>) does <strong><em>not</em></strong> fix the error</li>
  <li>Specifying a <code>dtype</code> (<code>np.array([1], dtype=np.uint8)</code>) does <strong><em>not</em></strong> fix the error</li>
  <li>Taking a slice of test (<code>test[:].shape</code>) makes the error go away</li>
  </ul>
  
  <p>My first instinct says that the inconsistent behavior with various <code>NumPY</code> methods (<code>arange</code> vs <code>zeros</code> vs <code>full</code>, etc) suggests it's just a bug in <code>NumPY</code>. However it's possible there's some underlying concept to <code>NumPY</code> that I'm misunderstanding. I'd like to be sure I'm not writing code with undefined behavior that's only working on accident.</p>