diff --git a/AUTHORS b/AUTHORS
index db3229e..2f51bae 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -43,6 +43,7 @@ Other contributors, listed alphabetically, are:
 * Sundar Raman <cybertoast@gmail.com>
 * Tiago Coutinho <coutinho@esrf.fr>
 * Thomas Kluyver <takowl@gmail.com>
+* Tom Nicholas <tomnicholas1@gmail.com>
 * Tom Ritchford <tom@swirly.com>
 * Virgil Dupras <virgil.dupras@savoirfairelinux.com>
 * Zebedee Nicholls <zebedee.nicholls@climate-energy-college.org>
diff --git a/CHANGES b/CHANGES
index 27a6c38..75e264d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -23,6 +23,9 @@ Pint Changelog
   when using to_compact()
 - Fixed crash when a Unit with prefix is declared for the first time while a Context
   containing unit redefinitions is active (Issue #1062, Thanks Guido Imperiale)
+- Removed outdated `_dir` attribute of `UnitsRegistry`, and added `__iter__`
+  method so that now `list(ureg)` returns a list of all units in registry.
+  (Issue #1072, Thanks Tom Nicholas)
 
 
 0.11 (2020-02-19)
diff --git a/pint/registry.py b/pint/registry.py
index a622a2d..5e1e0fa 100644
--- a/pint/registry.py
+++ b/pint/registry.py
@@ -177,26 +177,6 @@ class BaseRegistry(metaclass=RegistryMeta):
     #: Babel.Locale instance or None
     fmt_locale = None
 
-    #: List to be used in addition of units when dir(registry) is called.
-    #: Also used for autocompletion in IPython.
-    _dir = [
-        "Quantity",
-        "Unit",
-        "UnitsContainer",
-        "Measurement",
-        "define",
-        "load_definitions",
-        "get_name",
-        "get_symbol",
-        "get_dimensionality",
-        "get_base_units",
-        "get_root_units",
-        "parse_unit_name",
-        "parse_units",
-        "parse_expression",
-        "convert",
-    ]
-
     def __init__(
         self,
         filename="",
@@ -310,7 +290,18 @@ class BaseRegistry(metaclass=RegistryMeta):
         return self.parse_expression(item)
 
     def __dir__(self):
-        return list(self._units.keys()) + self._dir
+        #: Calling dir(registry) gives all units, methods, and attributes.
+        #: Also used for autocompletion in IPython.
+        return list(self._units.keys()) + list(object.__dir__(self))
+
+    def __iter__(self):
+        """Allows for listing all units in registry with `list(ureg)`.
+
+        Returns
+        -------
+        Iterator over names of all units in registry, ordered alphabetically.
+        """
+        return iter(sorted(self._units.keys()))
 
     def set_fmt_locale(self, loc):
         """Change the locale used by default by `format_babel`.

dir() mixes units with methods - implement __iter__ instead?
If I explore the directory the `UnitRegistry` with `dir(unit_registry)`, the result displays methods and attributes mixed in with actual choices of units - for example `parse_units` appears right next to `parsec`.

`__dir__` is conventionally used for methods and attributes: might it make for a cleaner interface to separate theses two distinct features of the class? 

I see that you need a way to list all the units easily, but I also notice `UnitRegistry` doesn't define an `__iter__` method. If `__iter__` returned the unit keys then you could instead list all the units with `list(unit_registry)`, which IMO would be a very intuitive syntax. You could of course then loop over units too for free. That would leave `__dir__` available to list just the actual class methods and attributes, which would make interactive exploration of the class structure easier.

Just a thought anyway.
diff --git a/pint/testsuite/test_unit.py b/pint/testsuite/test_unit.py
index d7eb649..76082c9 100644
--- a/pint/testsuite/test_unit.py
+++ b/pint/testsuite/test_unit.py
@@ -240,6 +240,10 @@ class TestRegistry(QuantityTestCase):
         self.assertNotEqual(s1, s3)
         self.assertEqual(ureg.default_format, "~")
 
+    def test_iterate(self):
+        ureg = UnitRegistry()
+        self.assertTrue("meter" in list(ureg))
+
     def test_parse_number(self):
         self.assertEqual(self.ureg.parse_expression("pi"), math.pi)
         self.assertEqual(self.ureg.parse_expression("x", x=2), 2)

pip install -e .
parse_log_pytest
pytest
pytest pytest-cov
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
coverage==7.2.7
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1671697413597/work
-e git+https://github.com/hgrecco/pint.git@0abd7868a0e043ca26ec0f3ba3fa6aa124b1e5a6#egg=Pint
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
pytest-cov==4.1.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: pint
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.2.7
      - pint==0.12.dev60+g0abd786
      - pytest-cov==4.1.0
prefix: /opt/conda/envs/pint

pint/testsuite/test_unit.py::TestRegistry::test_iterate pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_iterate
pint/testsuite/test_unit.py::TestUnit::test_creation pint/testsuite/test_unit.py::TestUnit::test_deepcopy pint/testsuite/test_unit.py::TestUnit::test_dimensionality pint/testsuite/test_unit.py::TestUnit::test_dimensionless pint/testsuite/test_unit.py::TestUnit::test_ipython pint/testsuite/test_unit.py::TestUnit::test_unit_casting pint/testsuite/test_unit.py::TestUnit::test_unit_cmp pint/testsuite/test_unit.py::TestUnit::test_unit_default_formatting pint/testsuite/test_unit.py::TestUnit::test_unit_div pint/testsuite/test_unit.py::TestUnit::test_unit_eqs pint/testsuite/test_unit.py::TestUnit::test_unit_formatting pint/testsuite/test_unit.py::TestUnit::test_unit_formatting_snake_case pint/testsuite/test_unit.py::TestUnit::test_unit_hash pint/testsuite/test_unit.py::TestUnit::test_unit_mul pint/testsuite/test_unit.py::TestUnit::test_unit_pow pint/testsuite/test_unit.py::TestUnit::test_unit_rdiv pint/testsuite/test_unit.py::TestUnit::test_unit_repr pint/testsuite/test_unit.py::TestRegistry::test_as_delta pint/testsuite/test_unit.py::TestRegistry::test_base pint/testsuite/test_unit.py::TestRegistry::test_check pint/testsuite/test_unit.py::TestRegistry::test_convert_parse_str pint/testsuite/test_unit.py::TestRegistry::test_default_format pint/testsuite/test_unit.py::TestRegistry::test_define pint/testsuite/test_unit.py::TestRegistry::test_imperial_symbol pint/testsuite/test_unit.py::TestRegistry::test_load pint/testsuite/test_unit.py::TestRegistry::test_name pint/testsuite/test_unit.py::TestRegistry::test_parse_alias pint/testsuite/test_unit.py::TestRegistry::test_parse_complex pint/testsuite/test_unit.py::TestRegistry::test_parse_expression_with_preprocessor pint/testsuite/test_unit.py::TestRegistry::test_parse_factor pint/testsuite/test_unit.py::TestRegistry::test_parse_mul_div pint/testsuite/test_unit.py::TestRegistry::test_parse_number pint/testsuite/test_unit.py::TestRegistry::test_parse_pattern_many_results pint/testsuite/test_unit.py::TestRegistry::test_parse_pattern_many_results_two_units pint/testsuite/test_unit.py::TestRegistry::test_parse_plural pint/testsuite/test_unit.py::TestRegistry::test_parse_prefix pint/testsuite/test_unit.py::TestRegistry::test_parse_pretty pint/testsuite/test_unit.py::TestRegistry::test_parse_single pint/testsuite/test_unit.py::TestRegistry::test_parse_string_pattern pint/testsuite/test_unit.py::TestRegistry::test_parse_string_pattern_no_preprocess pint/testsuite/test_unit.py::TestRegistry::test_parse_unit_with_preprocessor pint/testsuite/test_unit.py::TestRegistry::test_parse_units pint/testsuite/test_unit.py::TestRegistry::test_pint pint/testsuite/test_unit.py::TestRegistry::test_redefinition pint/testsuite/test_unit.py::TestRegistry::test_rep_and_parse pint/testsuite/test_unit.py::TestRegistry::test_repeated_convert pint/testsuite/test_unit.py::TestRegistry::test_singular_SI_prefix_convert pint/testsuite/test_unit.py::TestRegistry::test_symbol pint/testsuite/test_unit.py::TestRegistry::test_to_ref_vs_to pint/testsuite/test_unit.py::TestRegistry::test_wrap_referencing pint/testsuite/test_unit.py::TestRegistry::test_wraps pint/testsuite/test_unit.py::TestCompatibleUnits::test_context_sp pint/testsuite/test_unit.py::TestCompatibleUnits::test_get_base_units pint/testsuite/test_unit.py::TestCompatibleUnits::test_get_compatible_units pint/testsuite/test_unit.py::TestCompatibleUnits::test_many pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_as_delta pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_base pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_check pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_convert_parse_str pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_default_format pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_define pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_imperial_symbol pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_lazy pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_load pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_name pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_alias pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_complex pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_expression_with_preprocessor pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_factor pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_mul_div pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_number pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_pattern_many_results pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_pattern_many_results_two_units pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_plural pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_prefix pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_pretty pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_single pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_string_pattern pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_string_pattern_no_preprocess pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_unit_with_preprocessor pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_parse_units pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_pint pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_redefinition pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_rep_and_parse pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_repeated_convert pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_singular_SI_prefix_convert pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_symbol pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_to_ref_vs_to pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_wrap_referencing pint/testsuite/test_unit.py::TestRegistryWithDefaultRegistry::test_wraps pint/testsuite/test_unit.py::TestConvertWithOffset::test_alias pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00001 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00002 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00003 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00004 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00005 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00006 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00007 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00008 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00009 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00010 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00011 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00012 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00013 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00014 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00015 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00016 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00017 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00018 pint/testsuite/test_unit.py::TestConvertWithOffset::test_to_and_from_offset_units_00019
CHANGES pint/registry.py AUTHORS
CHANGES pint/registry.py AUTHORS