code: def __getattribute__(self, name):
      val = object.__getattribute__(self, name)
      if name == "series" and val is None:
          val = []
          with DB.readonly_cursor() as c:
              c.execute(
                  "SELECT * FROM series WHERE study = ?", (self.uid,)
              )
              cols = [el[0] for el in c.description]
              for row in c:
                  d = dict(zip(cols, row))
                  val.append(_Series(d))
          self.series = val
      return val
  
imports: import contextlib
  import getpass
  import logging
  import os
  import sqlite3
  import tempfile
  import warnings
  from io import BytesIO
  from os.path import join
  import numpy
  from nibabel.optpkg import optional_package
  from .nifti1 import Nifti1Header
label_desc: Use image node_id 2 for calling the _Study obj's underlying member method code with example usage: obj.__getattribute__(name) and returns: val