diff --git a/git/cmd.py b/git/cmd.py
index 5359924f0..fd39a8eeb 100644
--- a/git/cmd.py
+++ b/git/cmd.py
@@ -718,7 +718,7 @@ def __init__(self, working_dir: Union[None, PathLike] = None):
            It is meant to be the working tree directory if available, or the
            ``.git`` directory in case of bare repositories.
         """
-        super(Git, self).__init__()
+        super().__init__()
         self._working_dir = expand_path(working_dir)
         self._git_options: Union[List[str], Tuple[str, ...]] = ()
         self._persistent_git_options: List[str] = []
@@ -765,7 +765,7 @@ def _set_cache_(self, attr: str) -> None:
                 tuple(int(n) for n in version_numbers.split(".")[:4] if n.isdigit()),
             )
         else:
-            super(Git, self)._set_cache_(attr)
+            super()._set_cache_(attr)
         # END handle version info
 
     @property
diff --git a/git/config.py b/git/config.py
index 8f68c4e66..2cb057021 100644
--- a/git/config.py
+++ b/git/config.py
@@ -107,7 +107,7 @@ def __new__(cls, name: str, bases: Tuple, clsdict: Dict[str, Any]) -> "MetaParse
             # END for each base
         # END if mutating methods configuration is set
 
-        new_type = super(MetaParserBuilder, cls).__new__(cls, name, bases, clsdict)
+        new_type = super().__new__(cls, name, bases, clsdict)
         return new_type
 
 
@@ -150,6 +150,7 @@ class SectionConstraint(Generic[T_ConfigParser]):
     """
 
     __slots__ = ("_config", "_section_name")
+
     _valid_attrs_ = (
         "get_value",
         "set_value",
@@ -177,7 +178,7 @@ def __del__(self) -> None:
     def __getattr__(self, attr: str) -> Any:
         if attr in self._valid_attrs_:
             return lambda *args, **kwargs: self._call_config(attr, *args, **kwargs)
-        return super(SectionConstraint, self).__getattribute__(attr)
+        return super().__getattribute__(attr)
 
     def _call_config(self, method: str, *args: Any, **kwargs: Any) -> Any:
         """Call the configuration at the given method which must take a section name
@@ -206,36 +207,36 @@ class _OMD(OrderedDict_OMD):
     """Ordered multi-dict."""
 
     def __setitem__(self, key: str, value: _T) -> None:
-        super(_OMD, self).__setitem__(key, [value])
+        super().__setitem__(key, [value])
 
     def add(self, key: str, value: Any) -> None:
         if key not in self:
-            super(_OMD, self).__setitem__(key, [value])
+            super().__setitem__(key, [value])
             return None
-        super(_OMD, self).__getitem__(key).append(value)
+        super().__getitem__(key).append(value)
 
     def setall(self, key: str, values: List[_T]) -> None:
-        super(_OMD, self).__setitem__(key, values)
+        super().__setitem__(key, values)
 
     def __getitem__(self, key: str) -> Any:
-        return super(_OMD, self).__getitem__(key)[-1]
+        return super().__getitem__(key)[-1]
 
     def getlast(self, key: str) -> Any:
-        return super(_OMD, self).__getitem__(key)[-1]
+        return super().__getitem__(key)[-1]
 
     def setlast(self, key: str, value: Any) -> None:
         if key not in self:
-            super(_OMD, self).__setitem__(key, [value])
+            super().__setitem__(key, [value])
             return
 
-        prior = super(_OMD, self).__getitem__(key)
+        prior = super().__getitem__(key)
         prior[-1] = value
 
     def get(self, key: str, default: Union[_T, None] = None) -> Union[_T, None]:
-        return super(_OMD, self).get(key, [default])[-1]
+        return super().get(key, [default])[-1]
 
     def getall(self, key: str) -> List[_T]:
-        return super(_OMD, self).__getitem__(key)
+        return super().__getitem__(key)
 
     def items(self) -> List[Tuple[str, _T]]:  # type: ignore[override]
         """List of (key, last value for key)."""
@@ -679,7 +680,7 @@ def write_section(name: str, section_dict: _OMD) -> None:
 
     def items(self, section_name: str) -> List[Tuple[str, str]]:  # type: ignore[override]
         """:return: list((option, value), ...) pairs of all items in the given section"""
-        return [(k, v) for k, v in super(GitConfigParser, self).items(section_name) if k != "__name__"]
+        return [(k, v) for k, v in super().items(section_name) if k != "__name__"]
 
     def items_all(self, section_name: str) -> List[Tuple[str, List[str]]]:
         """:return: list((option, [values...]), ...) pairs of all items in the given section"""
@@ -747,7 +748,7 @@ def _assure_writable(self, method_name: str) -> None:
 
     def add_section(self, section: str) -> None:
         """Assures added options will stay in order"""
-        return super(GitConfigParser, self).add_section(section)
+        return super().add_section(section)
 
     @property
     def read_only(self) -> bool:
@@ -898,7 +899,7 @@ def rename_section(self, section: str, new_name: str) -> "GitConfigParser":
         if self.has_section(new_name):
             raise ValueError("Destination section '%s' already exists" % new_name)
 
-        super(GitConfigParser, self).add_section(new_name)
+        super().add_section(new_name)
         new_section = self._sections[new_name]
         for k, vs in self.items_all(section):
             new_section.setall(k, vs)
diff --git a/git/db.py b/git/db.py
index 1aacd0c84..9e278ea75 100644
--- a/git/db.py
+++ b/git/db.py
@@ -34,7 +34,7 @@ class GitCmdObjectDB(LooseObjectDB):
 
     def __init__(self, root_path: PathLike, git: "Git") -> None:
         """Initialize this instance with the root and a git command."""
-        super(GitCmdObjectDB, self).__init__(root_path)
+        super().__init__(root_path)
         self._git = git
 
     def info(self, binsha: bytes) -> OInfo:
diff --git a/git/exc.py b/git/exc.py
index bfb023fa5..124c5eeea 100644
--- a/git/exc.py
+++ b/git/exc.py
@@ -137,7 +137,7 @@ class GitCommandNotFound(CommandError):
     the GIT_PYTHON_GIT_EXECUTABLE environment variable."""
 
     def __init__(self, command: Union[List[str], Tuple[str], str], cause: Union[str, Exception]) -> None:
-        super(GitCommandNotFound, self).__init__(command, cause)
+        super().__init__(command, cause)
         self._msg = "Cmd('%s') not found%s"
 
 
@@ -151,7 +151,7 @@ def __init__(
         stderr: Union[bytes, str, None] = None,
         stdout: Union[bytes, str, None] = None,
     ) -> None:
-        super(GitCommandError, self).__init__(command, status, stderr, stdout)
+        super().__init__(command, status, stderr, stdout)
 
 
 class CheckoutError(GitError):
@@ -207,7 +207,7 @@ def __init__(
         stderr: Union[bytes, str, None] = None,
         stdout: Union[bytes, str, None] = None,
     ) -> None:
-        super(HookExecutionError, self).__init__(command, status, stderr, stdout)
+        super().__init__(command, status, stderr, stdout)
         self._msg = "Hook('%s') failed%s"
 
 
diff --git a/git/index/base.py b/git/index/base.py
index b87fefd56..c2333a2c2 100644
--- a/git/index/base.py
+++ b/git/index/base.py
@@ -153,7 +153,7 @@ def _set_cache_(self, attr: str) -> None:
 
             self._deserialize(stream)
         else:
-            super(IndexFile, self)._set_cache_(attr)
+            super()._set_cache_(attr)
 
     def _index_path(self) -> PathLike:
         if self.repo.git_dir:
@@ -1425,4 +1425,4 @@ def diff(
             raise ValueError("other must be None, Diffable.Index, a Tree or Commit, was %r" % other)
 
         # Diff against working copy - can be handled by superclass natively.
-        return super(IndexFile, self).diff(other, paths, create_patch, **kwargs)
+        return super().diff(other, paths, create_patch, **kwargs)
diff --git a/git/objects/base.py b/git/objects/base.py
index a771f9fbf..9f188a955 100644
--- a/git/objects/base.py
+++ b/git/objects/base.py
@@ -62,7 +62,7 @@ def __init__(self, repo: "Repo", binsha: bytes):
 
         :param binsha: 20 byte SHA1
         """
-        super(Object, self).__init__()
+        super().__init__()
         self.repo = repo
         self.binsha = binsha
         assert len(binsha) == 20, "Require 20 byte binary sha, got %r, len = %i" % (
@@ -108,7 +108,7 @@ def _set_cache_(self, attr: str) -> None:
             self.size = oinfo.size  # type:  int
             # assert oinfo.type == self.type, _assertion_msg_format % (self.binsha, oinfo.type, self.type)
         else:
-            super(Object, self)._set_cache_(attr)
+            super()._set_cache_(attr)
 
     def __eq__(self, other: Any) -> bool:
         """:return: True if the objects have the same SHA1"""
@@ -137,7 +137,7 @@ def __repr__(self) -> str:
     @property
     def hexsha(self) -> str:
         """:return: 40 byte hex version of our 20 byte binary sha"""
-        # b2a_hex produces bytes
+        # b2a_hex produces bytes.
         return bin_to_hex(self.binsha).decode("ascii")
 
     @property
@@ -190,7 +190,7 @@ def __init__(
             Path may not be set if the index object has been created directly, as it
             cannot be retrieved without knowing the parent tree.
         """
-        super(IndexObject, self).__init__(repo, binsha)
+        super().__init__(repo, binsha)
         if mode is not None:
             self.mode = mode
         if path is not None:
@@ -206,13 +206,13 @@ def __hash__(self) -> int:
 
     def _set_cache_(self, attr: str) -> None:
         if attr in IndexObject.__slots__:
-            # they cannot be retrieved lateron ( not without searching for them )
+            # They cannot be retrieved later on (not without searching for them).
             raise AttributeError(
                 "Attribute '%s' unset: path and mode attributes must have been set during %s object creation"
                 % (attr, type(self).__name__)
             )
         else:
-            super(IndexObject, self)._set_cache_(attr)
+            super()._set_cache_(attr)
         # END handle slot attribute
 
     @property
diff --git a/git/objects/commit.py b/git/objects/commit.py
index d39ca52bb..04acb668b 100644
--- a/git/objects/commit.py
+++ b/git/objects/commit.py
@@ -146,7 +146,7 @@ def __init__(
             as what time.altzone returns. The sign is inverted compared to git's
             UTC timezone.
         """
-        super(Commit, self).__init__(repo, binsha)
+        super().__init__(repo, binsha)
         self.binsha = binsha
         if tree is not None:
             assert isinstance(tree, Tree), "Tree needs to be a Tree instance, was %s" % type(tree)
@@ -218,7 +218,7 @@ def _set_cache_(self, attr: str) -> None:
             _binsha, _typename, self.size, stream = self.repo.odb.stream(self.binsha)
             self._deserialize(BytesIO(stream.read()))
         else:
-            super(Commit, self)._set_cache_(attr)
+            super()._set_cache_(attr)
         # END handle attrs
 
     @property
diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py
index 018f9a39c..1516306ec 100644
--- a/git/objects/submodule/base.py
+++ b/git/objects/submodule/base.py
@@ -124,7 +124,7 @@ def __init__(
         :param branch_path: Full (relative) path to ref to checkout when cloning the
             remote repository.
         """
-        super(Submodule, self).__init__(repo, binsha, mode, path)
+        super().__init__(repo, binsha, mode, path)
         self.size = 0
         self._parent_commit = parent_commit
         if url is not None:
@@ -154,7 +154,7 @@ def _set_cache_(self, attr: str) -> None:
         elif attr == "_name":
             raise AttributeError("Cannot retrieve the name of a submodule if it was not set initially")
         else:
-            super(Submodule, self)._set_cache_(attr)
+            super()._set_cache_(attr)
         # END handle attribute name
 
     @classmethod
@@ -174,7 +174,7 @@ def __eq__(self, other: Any) -> bool:
         """Compare with another submodule."""
         # We may only compare by name as this should be the ID they are hashed with.
         # Otherwise this type wouldn't be hashable.
-        # return self.path == other.path and self.url == other.url and super(Submodule, self).__eq__(other)
+        # return self.path == other.path and self.url == other.url and super().__eq__(other)
         return self._name == other._name
 
     def __ne__(self, other: object) -> bool:
diff --git a/git/objects/submodule/root.py b/git/objects/submodule/root.py
index 0ac8a22db..cfcbb4cb7 100644
--- a/git/objects/submodule/root.py
+++ b/git/objects/submodule/root.py
@@ -55,7 +55,7 @@ class RootModule(Submodule):
 
     def __init__(self, repo: "Repo"):
         # repo, binsha, mode=None, path=None, name = None, parent_commit=None, url=None, ref=None)
-        super(RootModule, self).__init__(
+        super().__init__(
             repo,
             binsha=self.NULL_BIN_SHA,
             mode=self.k_default_mode,
diff --git a/git/objects/submodule/util.py b/git/objects/submodule/util.py
index e13528a8f..3fc0b0b56 100644
--- a/git/objects/submodule/util.py
+++ b/git/objects/submodule/util.py
@@ -79,7 +79,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
         self._smref: Union["ReferenceType[Submodule]", None] = None
         self._index = None
         self._auto_write = True
-        super(SubmoduleConfigParser, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
 
     # { Interface
     def set_submodule(self, submodule: "Submodule") -> None:
@@ -107,7 +107,7 @@ def flush_to_index(self) -> None:
 
     # { Overridden Methods
     def write(self) -> None:  # type: ignore[override]
-        rval: None = super(SubmoduleConfigParser, self).write()
+        rval: None = super().write()
         self.flush_to_index()
         return rval
 
diff --git a/git/objects/tag.py b/git/objects/tag.py
index a7ff7f263..6eb1c8d90 100644
--- a/git/objects/tag.py
+++ b/git/objects/tag.py
@@ -64,7 +64,7 @@ def __init__(
             The timezone that the authored_date is in, in a format similar
             to :attr:`time.altzone`.
         """
-        super(TagObject, self).__init__(repo, binsha)
+        super().__init__(repo, binsha)
         if object is not None:
             self.object: Union["Commit", "Blob", "Tree", "TagObject"] = object
         if tag is not None:
@@ -108,4 +108,4 @@ def _set_cache_(self, attr: str) -> None:
                 self.message = ""
         # END check our attributes
         else:
-            super(TagObject, self)._set_cache_(attr)
+            super()._set_cache_(attr)
diff --git a/git/objects/tree.py b/git/objects/tree.py
index 708ab3edd..1be6f193e 100644
--- a/git/objects/tree.py
+++ b/git/objects/tree.py
@@ -237,7 +237,7 @@ def __init__(
         mode: int = tree_id << 12,
         path: Union[PathLike, None] = None,
     ):
-        super(Tree, self).__init__(repo, binsha, mode, path)
+        super().__init__(repo, binsha, mode, path)
 
     @classmethod
     def _get_intermediate_items(
@@ -254,7 +254,7 @@ def _set_cache_(self, attr: str) -> None:
             ostream = self.repo.odb.stream(self.binsha)
             self._cache: List[TreeCacheTup] = tree_entries_from_data(ostream.read())
         else:
-            super(Tree, self)._set_cache_(attr)
+            super()._set_cache_(attr)
         # END handle attribute
 
     def _iter_convert_to_object(self, iterable: Iterable[TreeCacheTup]) -> Iterator[IndexObjUnion]:
@@ -352,13 +352,13 @@ def traverse(
         # def is_tree_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Union['Tree', 'Blob', 'Submodule']]]]:
         #     return all(isinstance(x, (Blob, Tree, Submodule)) for x in inp[1])
 
-        # ret = super(Tree, self).traverse(predicate, prune, depth, branch_first, visit_once, ignore_self)
+        # ret = super().traverse(predicate, prune, depth, branch_first, visit_once, ignore_self)
         # ret_tup = itertools.tee(ret, 2)
         # assert is_tree_traversed(ret_tup), f"Type is {[type(x) for x in list(ret_tup[0])]}"
         # return ret_tup[0]"""
         return cast(
             Union[Iterator[IndexObjUnion], Iterator[TraversedTreeTup]],
-            super(Tree, self)._traverse(
+            super()._traverse(
                 predicate,
                 prune,
                 depth,  # type: ignore
@@ -374,7 +374,7 @@ def list_traverse(self, *args: Any, **kwargs: Any) -> IterableList[IndexObjUnion
             traverse()
             Tree -> IterableList[Union['Submodule', 'Tree', 'Blob']]
         """
-        return super(Tree, self)._list_traverse(*args, **kwargs)
+        return super()._list_traverse(*args, **kwargs)
 
     # List protocol
 
diff --git a/git/objects/util.py b/git/objects/util.py
index 5ccb3ec37..7af7fa0e5 100644
--- a/git/objects/util.py
+++ b/git/objects/util.py
@@ -577,7 +577,7 @@ class TraversableIterableObj(IterableObj, Traversable):
     TIobj_tuple = Tuple[Union[T_TIobj, None], T_TIobj]
 
     def list_traverse(self: T_TIobj, *args: Any, **kwargs: Any) -> IterableList[T_TIobj]:
-        return super(TraversableIterableObj, self)._list_traverse(*args, **kwargs)
+        return super()._list_traverse(*args, **kwargs)
 
     @overload  # type: ignore
     def traverse(self: T_TIobj) -> Iterator[T_TIobj]:
@@ -652,7 +652,5 @@ def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit',
         """
         return cast(
             Union[Iterator[T_TIobj], Iterator[Tuple[Union[None, T_TIobj], T_TIobj]]],
-            super(TraversableIterableObj, self)._traverse(
-                predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge  # type: ignore
-            ),
+            super()._traverse(predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge),  # type: ignore
         )
diff --git a/git/refs/head.py b/git/refs/head.py
index 30ff336d5..fa40943c6 100644
--- a/git/refs/head.py
+++ b/git/refs/head.py
@@ -39,7 +39,7 @@ class HEAD(SymbolicReference):
     def __init__(self, repo: "Repo", path: PathLike = _HEAD_NAME):
         if path != self._HEAD_NAME:
             raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path))
-        super(HEAD, self).__init__(repo, path)
+        super().__init__(repo, path)
         self.commit: "Commit"
 
     def orig_head(self) -> SymbolicReference:
diff --git a/git/refs/log.py b/git/refs/log.py
index 21c757ccd..ebdaf04d1 100644
--- a/git/refs/log.py
+++ b/git/refs/log.py
@@ -155,7 +155,7 @@ class RefLog(List[RefLogEntry], Serializable):
     __slots__ = ("_path",)
 
     def __new__(cls, filepath: Union[PathLike, None] = None) -> "RefLog":
-        inst = super(RefLog, cls).__new__(cls)
+        inst = super().__new__(cls)
         return inst
 
     def __init__(self, filepath: Union[PathLike, None] = None):
diff --git a/git/refs/reference.py b/git/refs/reference.py
index 8a0262ea4..f0eb6bfaa 100644
--- a/git/refs/reference.py
+++ b/git/refs/reference.py
@@ -62,7 +62,7 @@ def __init__(self, repo: "Repo", path: PathLike, check_path: bool = True) -> Non
         if check_path and not str(path).startswith(self._common_path_default + "/"):
             raise ValueError(f"Cannot instantiate {self.__class__.__name__!r} from path {path}")
         self.path: str  # SymbolicReference converts to string at the moment.
-        super(Reference, self).__init__(repo, path)
+        super().__init__(repo, path)
 
     def __str__(self) -> str:
         return self.name
@@ -87,7 +87,7 @@ def set_object(
             # END handle commit retrieval
         # END handle message is set
 
-        super(Reference, self).set_object(object, logmsg)
+        super().set_object(object, logmsg)
 
         if oldbinsha is not None:
             # From refs/files-backend.c in git-source:
diff --git a/git/refs/remote.py b/git/refs/remote.py
index e4b1f4392..f26ee08fc 100644
--- a/git/refs/remote.py
+++ b/git/refs/remote.py
@@ -40,7 +40,7 @@ def iter_items(
             common_path = join_path(common_path, str(remote))
         # END handle remote constraint
         # super is Reference
-        return super(RemoteReference, cls).iter_items(repo, common_path)
+        return super().iter_items(repo, common_path)
 
     # The Head implementation of delete also accepts strs, but this
     # implementation does not.  mypy doesn't have a way of representing
diff --git a/git/refs/symbolic.py b/git/refs/symbolic.py
index 6e4b657d6..73f64a57b 100644
--- a/git/refs/symbolic.py
+++ b/git/refs/symbolic.py
@@ -215,7 +215,7 @@ def _check_ref_name_valid(ref_path: PathLike) -> None:
         elif any(component.endswith(".lock") for component in str(ref_path).split("/")):
             raise ValueError(
                 f"Invalid reference '{ref_path}': references cannot have slash-separated components that end with"
-                f" '.lock'"
+                " '.lock'"
             )
 
     @classmethod
@@ -309,8 +309,8 @@ def set_commit(
     ) -> "SymbolicReference":
         """As set_object, but restricts the type of object to be a Commit.
 
-        :raise ValueError: If commit is not a Commit object or doesn't point to
-            a commit
+        :raise ValueError: If commit is not a :class:`~git.objects.commit.Commit` object
+            or doesn't point to a commit
         :return: self
         """
         # Check the type - assume the best if it is a base-string.
diff --git a/git/remote.py b/git/remote.py
index 880e87232..ccf70a25c 100644
--- a/git/remote.py
+++ b/git/remote.py
@@ -573,14 +573,14 @@ def __getattr__(self, attr: str) -> Any:
         """Allows to call this instance like
         remote.special( \\*args, \\*\\*kwargs) to call git-remote special self.name."""
         if attr == "_config_reader":
-            return super(Remote, self).__getattr__(attr)
+            return super().__getattr__(attr)
 
         # Sometimes, probably due to a bug in Python itself, we are being called
         # even though a slot of the same name exists.
         try:
             return self._config_reader.get(attr)
         except cp.NoOptionError:
-            return super(Remote, self).__getattr__(attr)
+            return super().__getattr__(attr)
         # END handle exception
 
     def _config_section_name(self) -> str:
@@ -592,7 +592,7 @@ def _set_cache_(self, attr: str) -> None:
             # values implicitly, such as in print(r.pushurl).
             self._config_reader = SectionConstraint(self.repo.config_reader("repository"), self._config_section_name())
         else:
-            super(Remote, self)._set_cache_(attr)
+            super()._set_cache_(attr)
 
     def __str__(self) -> str:
         return self.name
diff --git a/git/util.py b/git/util.py
index 73b3a2edd..bd1fbe247 100644
--- a/git/util.py
+++ b/git/util.py
@@ -718,7 +718,7 @@ class CallableRemoteProgress(RemoteProgress):
 
     def __init__(self, fn: Callable) -> None:
         self._callable = fn
-        super(CallableRemoteProgress, self).__init__()
+        super().__init__()
 
     def update(self, *args: Any, **kwargs: Any) -> None:
         self._callable(*args, **kwargs)
@@ -1040,7 +1040,7 @@ def __init__(
 
         :param max_block_time_s: Maximum amount of seconds we may lock.
         """
-        super(BlockingLockFile, self).__init__(file_path)
+        super().__init__(file_path)
         self._check_interval = check_interval_s
         self._max_block_time = max_block_time_s
 
@@ -1054,7 +1054,7 @@ def _obtain_lock(self) -> None:
         maxtime = starttime + float(self._max_block_time)
         while True:
             try:
-                super(BlockingLockFile, self)._obtain_lock()
+                super()._obtain_lock()
             except IOError as e:
                 # synity check: if the directory leading to the lockfile is not
                 # readable anymore, raise an exception
@@ -1103,7 +1103,7 @@ class IterableList(List[T_IterableObj]):
     __slots__ = ("_id_attr", "_prefix")
 
     def __new__(cls, id_attr: str, prefix: str = "") -> "IterableList[T_IterableObj]":
-        return super(IterableList, cls).__new__(cls)
+        return super().__new__(cls)
 
     def __init__(self, id_attr: str, prefix: str = "") -> None:
         self._id_attr = id_attr
diff --git a/test/performance/lib.py b/test/performance/lib.py
index 8e76fe815..2b2a632d9 100644
--- a/test/performance/lib.py
+++ b/test/performance/lib.py
@@ -32,10 +32,7 @@ class TestBigRepoR(TestBase):
     """
 
     def setUp(self):
-        try:
-            super(TestBigRepoR, self).setUp()
-        except AttributeError:
-            pass
+        super().setUp()
 
         repo_path = os.environ.get(k_env_git_repo)
         if repo_path is None:
@@ -64,17 +61,14 @@ class TestBigRepoRW(TestBigRepoR):
 
     def setUp(self):
         self.gitrwrepo = None
-        try:
-            super(TestBigRepoRW, self).setUp()
-        except AttributeError:
-            pass
+        super().setUp()
         dirname = tempfile.mktemp()
         os.mkdir(dirname)
         self.gitrwrepo = self.gitrorepo.clone(dirname, shared=True, bare=True, odbt=GitCmdObjectDB)
         self.puregitrwrepo = Repo(dirname, odbt=GitDB)
 
     def tearDown(self):
-        super(TestBigRepoRW, self).tearDown()
+        super().tearDown()
         if self.gitrwrepo is not None:
             rmtree(self.gitrwrepo.working_dir)
             self.gitrwrepo.git.clear_cache()
diff --git a/test/test_commit.py b/test/test_commit.py
index 21d17ae2c..1327616ed 100644
--- a/test/test_commit.py
+++ b/test/test_commit.py
@@ -275,7 +275,7 @@ def test_iteration(self):
 
         class Child(Commit):
             def __init__(self, *args, **kwargs):
-                super(Child, self).__init__(*args, **kwargs)
+                super().__init__(*args, **kwargs)
 
         child_commits = list(Child.iter_items(self.rorepo, "master", paths=("CHANGES", "AUTHORS")))
         assert type(child_commits[0]) is Child
diff --git a/test/test_git.py b/test/test_git.py
index 814316edd..06f8f5c97 100644
--- a/test/test_git.py
+++ b/test/test_git.py
@@ -32,7 +32,7 @@
 class TestGit(TestBase):
     @classmethod
     def setUpClass(cls):
-        super(TestGit, cls).setUpClass()
+        super().setUpClass()
         cls.git = Git(cls.rorepo.working_dir)
 
     def tearDown(self):
diff --git a/test/test_index.py b/test/test_index.py
index bf582bad9..3357dc880 100644
--- a/test/test_index.py
+++ b/test/test_index.py
@@ -66,7 +66,7 @@ def _make_hook(git_dir, name, content, make_exec=True):
 
 class TestIndex(TestBase):
     def __init__(self, *args):
-        super(TestIndex, self).__init__(*args)
+        super().__init__(*args)
         self._reset_progress()
 
     def _assert_fprogress(self, entries):
diff --git a/test/test_remote.py b/test/test_remote.py
index 3e7a025c5..8205c0bcd 100644
--- a/test/test_remote.py
+++ b/test/test_remote.py
@@ -44,7 +44,7 @@ class TestRemoteProgress(RemoteProgress):
     __slots__ = ("_seen_lines", "_stages_per_op", "_num_progress_messages")
 
     def __init__(self):
-        super(TestRemoteProgress, self).__init__()
+        super().__init__()
         self._seen_lines = []
         self._stages_per_op = {}
         self._num_progress_messages = 0
@@ -53,7 +53,7 @@ def _parse_progress_line(self, line):
         # We may remove the line later if it is dropped.
         # Keep it for debugging.
         self._seen_lines.append(line)
-        rval = super(TestRemoteProgress, self)._parse_progress_line(line)
+        rval = super()._parse_progress_line(line)
         return rval
 
     def line_dropped(self, line):