bpo-39481: PEP 585 for difflib, filecmp, fileinput (#19422)

diff --git a/Lib/difflib.py b/Lib/difflib.py
index 5d75643..f2215d8 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -32,6 +32,7 @@
 
 from heapq import nlargest as _nlargest
 from collections import namedtuple as _namedtuple
+from types import GenericAlias
 
 Match = _namedtuple('Match', 'a b size')
 
@@ -685,6 +686,9 @@
         # shorter sequence
         return _calculate_ratio(min(la, lb), la + lb)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 def get_close_matches(word, possibilities, n=3, cutoff=0.6):
     """Use SequenceMatcher to return list of the best "good enough" matches.
 
diff --git a/Lib/filecmp.py b/Lib/filecmp.py
index cfdca1e..7a4da6b 100644
--- a/Lib/filecmp.py
+++ b/Lib/filecmp.py
@@ -13,6 +13,7 @@
 import os
 import stat
 from itertools import filterfalse
+from types import GenericAlias
 
 __all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES']
 
@@ -247,6 +248,9 @@
         self.methodmap[attr](self)
         return getattr(self, attr)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 def cmpfiles(a, b, common, shallow=True):
     """Compare common files in two directories.
 
diff --git a/Lib/fileinput.py b/Lib/fileinput.py
index c1b0ec9..0c31f93 100644
--- a/Lib/fileinput.py
+++ b/Lib/fileinput.py
@@ -73,6 +73,7 @@
 """
 
 import sys, os
+from types import GenericAlias
 
 __all__ = ["input", "close", "nextfile", "filename", "lineno", "filelineno",
            "fileno", "isfirstline", "isstdin", "FileInput", "hook_compressed",
@@ -391,6 +392,8 @@
     def isstdin(self):
         return self._isstdin
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 def hook_compressed(filename, mode):
     ext = os.path.splitext(filename)[1]
diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py
index 196b059..4241eab 100644
--- a/Lib/test/test_genericalias.py
+++ b/Lib/test/test_genericalias.py
@@ -7,6 +7,9 @@
 )
 from collections.abc import *
 from contextlib import AbstractContextManager, AbstractAsyncContextManager
+from difflib import SequenceMatcher
+from filecmp import dircmp
+from fileinput import FileInput
 from mmap import mmap
 from ipaddress import IPv4Network, IPv4Interface, IPv6Network, IPv6Interface
 from itertools import chain
@@ -25,6 +28,9 @@
         for t in (type, tuple, list, dict, set, frozenset, enumerate,
                   mmap,
                   defaultdict, deque,
+                  SequenceMatcher,
+                  dircmp,
+                  FileInput,
                   OrderedDict, Counter, UserDict, UserList,
                   Pattern, Match,
                   AbstractContextManager, AbstractAsyncContextManager,