Skip to content

Commit

Permalink
bpo-34805: Guarantee that __subclasses__() is in definition order. (G…
Browse files Browse the repository at this point in the history
  • Loading branch information
rhettinger authored Dec 19, 2020
1 parent fb34096 commit 51f4688
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Doc/library/stdtypes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5353,8 +5353,8 @@ types, where they are relevant. Some of these are not reported by the
.. method:: class.__subclasses__

Each class keeps a list of weak references to its immediate subclasses. This
method returns a list of all those references still alive.
Example::
method returns a list of all those references still alive. The list is in
definition order. Example::

>>> int.__subclasses__()
[<class 'bool'>]
Expand Down
10 changes: 10 additions & 0 deletions Lib/test/test_descr.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import itertools
import math
import pickle
import random
import string
import sys
import types
import unittest
Expand Down Expand Up @@ -845,6 +847,14 @@ class Module(types.ModuleType, str):
self.fail("inheriting from ModuleType and str at the same time "
"should fail")

# Issue 34805: Verify that definition order is retained
def random_name():
return ''.join(random.choices(string.ascii_letters, k=10))
class A:
pass
subclasses = [type(random_name(), (A,), {}) for i in range(100)]
self.assertEqual(A.__subclasses__(), subclasses)

def test_multiple_inheritance(self):
# Testing multiple inheritance...
class C(object):
Expand Down

0 comments on commit 51f4688

Please sign in to comment.