diff --git a/CHANGES.rst b/CHANGES.rst
index d83b78b..500e178 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -30,6 +30,16 @@
   compatibility problem. See `issue 36
   <https://github.com/zopefoundation/zope.schema/issues/36>`_.
 
+- ``Field`` instances are only equal when their ``.interface`` is
+  equal. In practice, this means that two otherwise identical fields
+  of separate schemas are not equal, do not hash the same, and can
+  both be members of the same ``dict`` or ``set``. Prior to this
+  release, when hashing was identity based but only worked on Python
+  2, that was the typical behaviour. (Field objects that are *not*
+  members of a schema continue to compare and hash equal if they have
+  the same attributes and interfaces.) See `issue 40
+  <https://github.com/zopefoundation/zope.schema/issues/40>`_.
+
 - Orderable fields, including ``Int``, ``Float``, ``Decimal``,
   ``Timedelta``, ``Date`` and ``Time``, can now have a
   ``missing_value`` without needing to specify concrete ``min`` and
diff --git a/src/zope/schema/_bootstrapfields.py b/src/zope/schema/_bootstrapfields.py
index 6fee839..6d613b4 100644
--- a/src/zope/schema/_bootstrapfields.py
+++ b/src/zope/schema/_bootstrapfields.py
@@ -119,7 +119,7 @@ class Field(Attribute):
     default = DefaultProperty('default')
 
     # These were declared as slots in zope.interface, we override them here to
-    # get rid of the dedcriptors so they don't break .bind()
+    # get rid of the descriptors so they don't break .bind()
     __name__ = None
     interface = None
     _Element__tagged_values = None
@@ -206,21 +206,24 @@ class Field(Attribute):
             names.update(getFields(interface))
 
         # order will be different always, don't compare it
-        if 'order' in names:
-            del names['order']
+        names.pop('order', None)
         return names
 
     def __hash__(self):
         # Equal objects should have equal hashes;
         # equal hashes does not imply equal objects.
-        value = (type(self),) + tuple(self.__get_property_names_to_compare())
+        value = (type(self), self.interface) + tuple(self.__get_property_names_to_compare())
         return hash(value)
 
     def __eq__(self, other):
-        # should be the same type
-        if type(self) != type(other):
+        # should be the same type and in the same interface (or no interface at all)
+        if self is other:
+            return True
+
+        if type(self) != type(other) or self.interface != other.interface:
             return False
 
+
         # should have the same properties
         names = self.__get_property_names_to_compare()
         # XXX: What about the property names of the other object? Even

Should Field objects include their owning `interface` in equality/hashing?
Currently they don't include that, leaving open the possibility that two different Field objects from two different interfaces are equal, which may or may not be the intent.
```pycon
>>> from zope.interface import Interface
>>> from zope.schema import Int
>>> class IOne(Interface):
...    one = Int(title=u'title')
...
>>> class ITwo(Interface):
...    two = Int(title=u'title')
...
>>> IOne['one'] == ITwo['two']
True
```
diff --git a/src/zope/schema/tests/test__bootstrapfields.py b/src/zope/schema/tests/test__bootstrapfields.py
index 3355a1e..3e6365a 100644
--- a/src/zope/schema/tests/test__bootstrapfields.py
+++ b/src/zope/schema/tests/test__bootstrapfields.py
@@ -142,7 +142,88 @@ class DefaultPropertyTests(unittest.TestCase):
         self.assertEqual(_called_with, [inst.context])
 
 
-class FieldTests(unittest.TestCase):
+class EqualityTestsMixin(object):
+
+    def _getTargetClass(self):
+        raise NotImplementedError
+
+    def _makeOne(self, *args, **kw):
+        return self._getTargetClass()(*args, **kw)
+
+    def test_is_hashable(self):
+        field = self._makeOne()
+        hash(field)  # doesn't raise
+
+    def test_equal_instances_have_same_hash(self):
+        # Equal objects should have equal hashes
+        field1 = self._makeOne()
+        field2 = self._makeOne()
+        self.assertIsNot(field1, field2)
+        self.assertEqual(field1, field2)
+        self.assertEqual(hash(field1), hash(field2))
+
+    def test_instances_in_different_interfaces_not_equal(self):
+        from zope import interface
+
+        field1 = self._makeOne()
+        field2 = self._makeOne()
+        self.assertEqual(field1, field2)
+        self.assertEqual(hash(field1), hash(field2))
+
+        class IOne(interface.Interface):
+            one = field1
+
+        class ITwo(interface.Interface):
+            two = field2
+
+        self.assertEqual(field1, field1)
+        self.assertEqual(field2, field2)
+        self.assertNotEqual(field1, field2)
+        self.assertNotEqual(hash(field1), hash(field2))
+
+    def test_hash_across_unequal_instances(self):
+        # Hash equality does not imply equal objects.
+        # Our implementation only considers property names,
+        # not values. That's OK, a dict still does the right thing.
+        field1 = self._makeOne(title=u'foo')
+        field2 = self._makeOne(title=u'bar')
+        self.assertIsNot(field1, field2)
+        self.assertNotEqual(field1, field2)
+        self.assertEqual(hash(field1), hash(field2))
+
+        d = {field1: 42}
+        self.assertIn(field1, d)
+        self.assertEqual(42, d[field1])
+        self.assertNotIn(field2, d)
+        with self.assertRaises(KeyError):
+            d.__getitem__(field2)
+
+    def test___eq___different_type(self):
+        left = self._makeOne()
+
+        class Derived(self._getTargetClass()):
+            pass
+        right = Derived()
+        self.assertNotEqual(left, right)
+        self.assertTrue(left != right)
+
+    def test___eq___same_type_different_attrs(self):
+        left = self._makeOne(required=True)
+        right = self._makeOne(required=False)
+        self.assertNotEqual(left, right)
+        self.assertTrue(left != right)
+
+    def test___eq___same_type_same_attrs(self):
+        left = self._makeOne()
+        self.assertEqual(left, left)
+
+        right = self._makeOne()
+        self.assertEqual(left, right)
+        self.assertFalse(left != right)
+
+
+class FieldTests(EqualityTestsMixin,
+                 unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._bootstrapfields import Field
@@ -304,27 +385,6 @@ class FieldTests(unittest.TestCase):
         field._type = int
         field.validate(1)  # doesn't raise
 
-    def test___eq___different_type(self):
-        left = self._makeOne()
-
-        class Derived(self._getTargetClass()):
-            pass
-        right = Derived()
-        self.assertEqual(left == right, False)
-        self.assertEqual(left != right, True)
-
-    def test___eq___same_type_different_attrs(self):
-        left = self._makeOne(required=True)
-        right = self._makeOne(required=False)
-        self.assertEqual(left == right, False)
-        self.assertEqual(left != right, True)
-
-    def test___eq___same_type_same_attrs(self):
-        left = self._makeOne()
-        right = self._makeOne()
-        self.assertEqual(left == right, True)
-        self.assertEqual(left != right, False)
-
     def test_get_miss(self):
         field = self._makeOne(__name__='nonesuch')
         inst = DummyInst()
@@ -364,44 +424,14 @@ class FieldTests(unittest.TestCase):
         field.set(inst, 'AFTER')
         self.assertEqual(inst.extant, 'AFTER')
 
-    def test_is_hashable(self):
-        field = self._makeOne()
-        hash(field)  # doesn't raise
 
-    def test_equal_instances_have_same_hash(self):
-        # Equal objects should have equal hashes
-        field1 = self._makeOne()
-        field2 = self._makeOne()
-        self.assertIsNot(field1, field2)
-        self.assertEqual(field1, field2)
-        self.assertEqual(hash(field1), hash(field2))
-
-    def test_hash_across_unequal_instances(self):
-        # Hash equality does not imply equal objects.
-        # Our implementation only considers property names,
-        # not values. That's OK, a dict still does the right thing.
-        field1 = self._makeOne(title=u'foo')
-        field2 = self._makeOne(title=u'bar')
-        self.assertIsNot(field1, field2)
-        self.assertNotEqual(field1, field2)
-        self.assertEqual(hash(field1), hash(field2))
-
-        d = {field1: 42}
-        self.assertIn(field1, d)
-        self.assertEqual(42, d[field1])
-        self.assertNotIn(field2, d)
-        with self.assertRaises(KeyError):
-            d[field2]
-
-class ContainerTests(unittest.TestCase):
+class ContainerTests(EqualityTestsMixin,
+                     unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._bootstrapfields import Container
         return Container
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
     def test_validate_not_required(self):
         field = self._makeOne(required=False)
         field.validate(None)
@@ -529,15 +559,13 @@ class MinMaxLenTests(unittest.TestCase):
         self.assertRaises(TooLong, mml._validate, (0, 1, 2))
 
 
-class TextTests(unittest.TestCase):
+class TextTests(EqualityTestsMixin,
+                unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._bootstrapfields import Text
         return Text
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
     def test_ctor_defaults(self):
         from zope.schema._compat import text_type
         txt = self._makeOne()
@@ -593,15 +621,13 @@ class TextTests(unittest.TestCase):
         self.assertEqual(txt.fromUnicode(deadbeef), deadbeef)
 
 
-class TextLineTests(unittest.TestCase):
+class TextLineTests(EqualityTestsMixin,
+                    unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._field import TextLine
         return TextLine
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
     def test_class_conforms_to_ITextLine(self):
         from zope.interface.verify import verifyClass
         from zope.schema.interfaces import ITextLine
@@ -711,15 +737,13 @@ class PasswordTests(unittest.TestCase):
         self.assertEqual(field.constraint(u'abc\ndef'), False)
 
 
-class BoolTests(unittest.TestCase):
+class BoolTests(EqualityTestsMixin,
+                unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._bootstrapfields import Bool
         return Bool
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
     def test_ctor_defaults(self):
         txt = self._makeOne()
         self.assertEqual(txt._type, bool)
@@ -774,16 +798,14 @@ class OrderableMissingValueMixin(object):
         self.assertEqual(self.mvm_missing_value, field.missing_value)
 
 
-class IntTests(OrderableMissingValueMixin,
+class IntTests(EqualityTestsMixin,
+               OrderableMissingValueMixin,
                unittest.TestCase):
 
     def _getTargetClass(self):
         from zope.schema._bootstrapfields import Int
         return Int
 
-    def _makeOne(self, *args, **kw):
-        return self._getTargetClass()(*args, **kw)
-
     def test_ctor_defaults(self):
         from zope.schema._compat import integer_types
         txt = self._makeOne()

pip install -e .[test]
parse_log_pytest
requirements.txt
pytest
3.6
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0
zope.event==4.6
zope.exceptions==4.6
zope.interface==5.5.2
-e git+https://github.com/zopefoundation/zope.schema.git@b6625652d6bdd0d3c6a6568bd1c9f592a2013ec6#egg=zope.schema
zope.testing==5.0.1
zope.testrunner==5.6

name: zope.schema
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=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - 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=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
      - zope-event==4.6
      - zope-exceptions==4.6
      - zope-interface==5.5.2
      - zope-testing==5.0.1
      - zope-testrunner==5.6
prefix: /opt/conda/envs/zope.schema

src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_instances_in_different_interfaces_not_equal
src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___get__ src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___not_missing_w_check src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___not_missing_wo_check src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___w_missing_wo_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___w_defaultFactory_not_ICAF_no_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___w_defaultFactory_w_ICAF_w_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___wo_defaultFactory_hit src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___wo_defaultFactory_miss src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test__get___wo_defaultFactory_in_dict src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_bind src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_order_madness src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_w_both_title_and_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_w_title_wo_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_wo_title_w_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_constraint_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_defaultFactory src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_defaultFactory_returning_missing_value src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_required_readonly_missingValue src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_get_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_get_miss src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_miss_no_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_miss_w_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_set_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_set_readonly src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_fails src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_raises_StopValidation src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_missing_and_required src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_missing_not_required src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_wrong_type src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_collection_but_not_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_not_collection_but_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_not_collection_not_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_w_collections src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_collection_but_not_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_not_collection_but_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_not_collection_not_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_w_collections src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_default_too_large src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_default_too_small src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_validate_too_long src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_validate_too_short src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_w_invalid_default src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_wrong_types src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_class_conforms_to_ITextLine src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_constraint src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_instance_conforms_to_ITextLine src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_wrong_types src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_constraint src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_set_normal src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_set_unchanged src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_unchanged_already_set src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_unchanged_not_already_set src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test__validate_w_int src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_set_w_int src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_required
src/zope/schema/_bootstrapfields.py CHANGES.rst
src/zope/schema/_bootstrapfields.py CHANGES.rst