diff --git a/CHANGES.rst b/CHANGES.rst
index 77fecbd..1d6923c 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -2,7 +2,7 @@
  Changes
 =========
 
-4.8.0 (unreleased)
+5.0.0 (unreleased)
 ==================
 
 - Support the ``PURE_PYTHON`` environment variable at runtime instead
@@ -33,11 +33,20 @@
   - Likewise, tagged values are relatively rare, so don't allocate a
     dictionary to hold them until they are used.
   - Use ``__slots___`` or the C equivalent ``tp_members`` in more
-    common places. See `PR 155 <https://github.com/zopefoundation/zope.interface/pull/155>`_.
+    common places. Note that this removes the ability to set arbitrary
+    instance variables on certain objects.
+    See `PR 155 <https://github.com/zopefoundation/zope.interface/pull/155>`_.
 
   The changes in this release resulted in a 7% memory reduction after
   loading about 6,000 modules that define about 2,200 interfaces.
 
+- Remove support for hashing uninitialized interfaces. This could only
+  be done by subclassing ``InterfaceClass``. This has generated a
+  warning since it was first added in 2011 (3.6.5). Please call the
+  ``InterfaceClass`` constructor or otherwise set the appropriate
+  fields in your subclass before attempting to hash or sort it. See
+  `issue 157 <https://github.com/zopefoundation/zope.interface/issues/157>`_.
+
 4.7.1 (2019-11-11)
 ==================
 
diff --git a/setup.py b/setup.py
index d6d0e34..b5e87a8 100644
--- a/setup.py
+++ b/setup.py
@@ -95,7 +95,7 @@ long_description = (
         )
 
 setup(name='zope.interface',
-      version='4.8.0.dev0',
+      version='5.0.0.dev0',
       url='https://github.com/zopefoundation/zope.interface',
       license='ZPL 2.1',
       description='Interfaces for Python',
diff --git a/src/zope/interface/interface.py b/src/zope/interface/interface.py
index 106a60d..7fa56aa 100644
--- a/src/zope/interface/interface.py
+++ b/src/zope/interface/interface.py
@@ -17,7 +17,6 @@
 import sys
 from types import MethodType
 from types import FunctionType
-import warnings
 import weakref
 
 from zope.interface._compat import _use_c_impl
@@ -579,7 +578,7 @@ class InterfaceClass(Element, InterfaceBase, Specification):
         if other is None:
             return -1
 
-        n1 = (getattr(self, '__name__', ''), getattr(self, '__module__', ''))
+        n1 = (self.__name__, self.__module__)
         n2 = (getattr(other, '__name__', ''), getattr(other, '__module__', ''))
 
         # This spelling works under Python3, which doesn't have cmp().
@@ -589,11 +588,7 @@ class InterfaceClass(Element, InterfaceBase, Specification):
         try:
             return self._v_cached_hash
         except AttributeError:
-            try:
-                self._v_cached_hash = hash((self.__name__, self.__module__))
-            except AttributeError: # pragma: no cover
-                warnings.warn('Hashing uninitialized InterfaceClass instance')
-                return 1
+            self._v_cached_hash = hash((self.__name__, self.__module__))
         return self._v_cached_hash
 
     def __eq__(self, other):

Remove support for "hashing" uninitialized interfaces
Since [this commit in 2011](https://github.com/zopefoundation/zope.interface/commit/05a899a8275bbd6b2e332a4fbfeab4d7e1dc40f8) (zope.interface 3.6.5) we've been emitting a warning if a buggy subclass of `InterfaceClass` attempted to hash itself before completing its initialization. In the [original bug report](https://bugs.launchpad.net/zope.interface/+bug/811792) this was identified to be a bug in the third-party module that was doing this. Because it had a release scheduled soon and because of the vagaries of downstream packaging schedules, @tseaver added the current behaviour to workaround the issue. 

But the current behaviour is not ideal; in addition to the warning it can lead to objects not being found when their hash changes, and of course there's the warning being printed. Plus, with #156, the fallback behaviour got even uglier.

We've been emitting a warning for more than 8 years. The only test in this repo that depends on the behaviour is one that specifically invokes it. 

I hope we can drop the fallback.
diff --git a/src/zope/interface/tests/test_interface.py b/src/zope/interface/tests/test_interface.py
index f5a57b4..3bf26dc 100644
--- a/src/zope/interface/tests/test_interface.py
+++ b/src/zope/interface/tests/test_interface.py
@@ -834,20 +834,12 @@ class InterfaceClassTests(unittest.TestCase):
                                 'zope.interface.tests.test_interface'))))
 
     def test___hash___missing_required_attrs(self):
-        import warnings
-        from warnings import catch_warnings
-
         class Derived(self._getTargetClass()):
             def __init__(self):
                 pass # Don't call base class.
         derived = Derived()
-        with catch_warnings(record=True) as warned:
-            warnings.simplefilter('always') # see LP #825249
-            self.assertEqual(hash(derived), 1)
-            self.assertEqual(len(warned), 1)
-            self.assertTrue(warned[0].category is UserWarning)
-            self.assertEqual(str(warned[0].message),
-                             'Hashing uninitialized InterfaceClass instance')
+        with self.assertRaises(AttributeError):
+            hash(derived)
 
     def test_comparison_with_None(self):
         iface = self._makeOne()

pip install -e .[dev]
parse_log_pytest
nose coverage pytest
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
coverage==7.2.7
exceptiongroup==1.2.2
importlib-metadata==6.7.0
iniconfig==2.0.0
nose==1.3.7
packaging==24.0
pluggy==1.2.0
pytest==7.4.4
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0
-e git+https://github.com/zopefoundation/zope.interface.git@fec4a51b1ce8526de23c2558bfd26e253c4b6250#egg=zope.interface

name: zope.interface
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
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_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
  - pip=22.3.1=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
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.2.7
      - exceptiongroup==1.2.2
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - nose==1.3.7
      - packaging==24.0
      - pluggy==1.2.0
      - pytest==7.4.4
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/zope.interface

src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___hash___missing_required_attrs
src/zope/interface/tests/test_interface.py::Test_invariant::test_w_multiple src/zope/interface/tests/test_interface.py::Test_invariant::test_w_single src/zope/interface/tests/test_interface.py::Test_taggedValue::test_w_multiple src/zope/interface/tests/test_interface.py::Test_taggedValue::test_w_multiple_overwriting src/zope/interface/tests/test_interface.py::Test_taggedValue::test_w_single src/zope/interface/tests/test_interface.py::ElementTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::ElementTests::test_ctor_no_doc_space_in_name src/zope/interface/tests/test_interface.py::ElementTests::test_getTaggedValue_miss src/zope/interface/tests/test_interface.py::ElementTests::test_queryTaggedValue_miss src/zope/interface/tests/test_interface.py::ElementTests::test_queryTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::ElementTests::test_setTaggedValue src/zope/interface/tests/test_interface.py::GenericSpecificationBaseTests::test_implementedBy_miss src/zope/interface/tests/test_interface.py::GenericSpecificationBaseTests::test_providedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBaseTests::test_implementedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBaseTests::test_optimizations src/zope/interface/tests/test_interface.py::SpecificationBaseTests::test_providedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test___call___hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test___call___miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_implementedBy_hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_implementedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_isOrExtends_hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_isOrExtends_miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_providedBy_hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_providedBy_miss src/zope/interface/tests/test_interface.py::GenericInterfaceBaseTests::test___call___w___conform___ob_no_provides_wo_alternate src/zope/interface/tests/test_interface.py::GenericInterfaceBaseTests::test___call___w___conform___returning_value src/zope/interface/tests/test_interface.py::GenericInterfaceBaseTests::test___call___wo___conform___ob_no_provides_w_alternate src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test___call___w___conform___ob_no_provides_wo_alternate src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test___call___w___conform___returning_value src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test___call___wo___conform___ob_no_provides_w_alternate src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test_optimizations src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___adapt___ob_no_provides_uses_hooks src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___adapt___ob_provides src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___w___conform___miss_ob_provides src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___w___conform___ob_no_provides_wo_alternate src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___w___conform___returning_value src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___wo___conform___ob_no_provides_w_alternate src/zope/interface/tests/test_interface.py::SpecificationTests::test___setBases_subscribes_bases_and_notifies_dependents src/zope/interface/tests/test_interface.py::SpecificationTests::test_changed_clears_volatiles_and_implied src/zope/interface/tests/test_interface.py::SpecificationTests::test_ctor src/zope/interface/tests/test_interface.py::SpecificationTests::test_extends_non_strict_w_self src/zope/interface/tests/test_interface.py::SpecificationTests::test_extends_strict_w_self src/zope/interface/tests/test_interface.py::SpecificationTests::test_extends_strict_wo_self src/zope/interface/tests/test_interface.py::SpecificationTests::test_get_hit_from_base_wo__v_attrs src/zope/interface/tests/test_interface.py::SpecificationTests::test_get_hit_w__v_attrs src/zope/interface/tests/test_interface.py::SpecificationTests::test_interfaces_skips_already_seen src/zope/interface/tests/test_interface.py::SpecificationTests::test_subscribe_again src/zope/interface/tests/test_interface.py::SpecificationTests::test_subscribe_first_time src/zope/interface/tests/test_interface.py::SpecificationTests::test_unsubscribe src/zope/interface/tests/test_interface.py::SpecificationTests::test_unsubscribe_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___contains___hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___contains___miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___getitem___hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___getitem___miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___hash___normal src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___iter__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___reduce__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_comparison_with_None src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_comparison_with_same_instance src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_comparison_with_same_named_instance_in_other_module src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w___annotations__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w___locals__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w__decorator_non_return src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w_invalid_attr_type src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_bad_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_w_attrs_attrib_methods src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_w_explicit___doc__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_direct_hit_local_miss_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_direct_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_getBases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_getDescriptionFor_hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_getDescriptionFor_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_interfaces src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_isEqualOrExtendedBy_identity src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_isEqualOrExtendedBy_subiface src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_isEqualOrExtendedBy_unrelated src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_False_ignores_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_True_bases_w_same_names src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_True_no_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_True_simple src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_False_ignores_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_True_bases_w_same_names src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_True_no_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_True_w_bases_simple src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_queryDescriptionFor_hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_queryDescriptionFor_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_in_base_w_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_in_base_wo_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_w_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_wo_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_pass src/zope/interface/tests/test_interface.py::InterfaceTests::testInterfaceExtendsInterface src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___defers_to___conform___ src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___miss_w_alternate src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___miss_wo_alternate src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___object_implements src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___w_adapter_hook src/zope/interface/tests/test_interface.py::InterfaceTests::test___contains__derived src/zope/interface/tests/test_interface.py::InterfaceTests::test___contains__nonesuch src/zope/interface/tests/test_interface.py::InterfaceTests::test___contains__simple src/zope/interface/tests/test_interface.py::InterfaceTests::test___doc___as_element src/zope/interface/tests/test_interface.py::InterfaceTests::test___doc___element src/zope/interface/tests/test_interface.py::InterfaceTests::test___doc___non_element src/zope/interface/tests/test_interface.py::InterfaceTests::test___getitem___derived src/zope/interface/tests/test_interface.py::InterfaceTests::test___getitem__nonesuch src/zope/interface/tests/test_interface.py::InterfaceTests::test___getitem__simple src/zope/interface/tests/test_interface.py::InterfaceTests::test___iter__derived src/zope/interface/tests/test_interface.py::InterfaceTests::test___iter__empty src/zope/interface/tests/test_interface.py::InterfaceTests::test___iter__simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_attributes_link_to_interface src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_base_and_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_base_not_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_multiple src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_multiple_w_explict_implements src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_description_cache_management src/zope/interface/tests/test_interface.py::InterfaceTests::test_function_attributes_become_tagged_values src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDescriptionFor_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDescriptionFor_nonesuch_no_default src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDescriptionFor_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_interface_object_provides_Interface src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_as_decorator src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_mutandis src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_nested src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_methods_link_to_interface src/zope/interface/tests/test_interface.py::InterfaceTests::test_namesAndDescriptions_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_namesAndDescriptions_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_names_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_names_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_taggedValue src/zope/interface/tests/test_interface.py::InterfaceTests::test_verifyClass src/zope/interface/tests/test_interface.py::InterfaceTests::test_verifyObject src/zope/interface/tests/test_interface.py::AttributeTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::AttributeTests::test_ctor_no_doc_space_in_name src/zope/interface/tests/test_interface.py::AttributeTests::test_getTaggedValue_miss src/zope/interface/tests/test_interface.py::AttributeTests::test_queryTaggedValue_miss src/zope/interface/tests/test_interface.py::AttributeTests::test_queryTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::AttributeTests::test_setTaggedValue src/zope/interface/tests/test_interface.py::MethodTests::test___call___raises_BrokenImplementation src/zope/interface/tests/test_interface.py::MethodTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::MethodTests::test_ctor_no_doc_space_in_name src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureInfo_bare src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_bare src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_kwargs src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_only_required src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_optional src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_varargs src/zope/interface/tests/test_interface.py::MethodTests::test_getTaggedValue_miss src/zope/interface/tests/test_interface.py::MethodTests::test_optional_as_property src/zope/interface/tests/test_interface.py::MethodTests::test_queryTaggedValue_miss src/zope/interface/tests/test_interface.py::MethodTests::test_queryTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::MethodTests::test_setTaggedValue src/zope/interface/tests/test_interface.py::Test_fromFunction::test_bare src/zope/interface/tests/test_interface.py::Test_fromFunction::test_full_spectrum src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_interface src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_kwargs src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_name src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_only_required src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_optional src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_optional_self src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_varargs src/zope/interface/tests/test_interface.py::Test_fromMethod::test_full_spectrum src/zope/interface/tests/test_interface.py::Test_fromMethod::test_no_args src/zope/interface/tests/test_interface.py::Test_fromMethod::test_w_non_method
setup.py src/zope/interface/interface.py CHANGES.rst
setup.py src/zope/interface/interface.py CHANGES.rst