docs: def get_members(self, access=None):
          """
          returns list of members according to access type
  
          If access equals to None, then returned list will contain all members.
          You should not modify the list content, otherwise different
          optimization data will stop work and may to give you wrong results.
  
          :param access: describes desired members
          :type access: :class:ACCESS_TYPES
  
          :rtype: [ members ]
          """
          if access == ACCESS_TYPES.PUBLIC:
              return self.public_members
          elif access == ACCESS_TYPES.PROTECTED:
              return self.protected_members
          elif access == ACCESS_TYPES.PRIVATE:
              return self.private_members
  
          all_members = []
          all_members.extend(self.public_members)
          all_members.extend(self.protected_members)
          all_members.extend(self.private_members)
          return all_members