Source code for ufl.utils.counted
"""Mixin class for types with a global unique counter attached to each object."""
# Copyright (C) 2008-2016 Martin Sandve Alnæs
#
# This file is part of UFL (https://www.fenicsproject.org)
#
# SPDX-License-Identifier: LGPL-3.0-or-later
import itertools
[docs]class Counted:
"""Mixin class for globally counted objects."""
# Mixin classes do not work well with __slots__ so _count must be
# added to the __slots__ of the inheriting class
__slots__ = ()
_counter = None
def __init__(self, count=None, counted_class=None):
"""Initialize the Counted instance.
Args:
count: The object count, if ``None`` defaults to the next value
according to the global counter (per type).
counted_class: Class to attach the global counter too. If ``None``
then ``type(self)`` will be used.
"""
# create a new counter for each subclass
counted_class = counted_class or type(self)
if counted_class._counter is None:
counted_class._counter = itertools.count()
self._count = count if count is not None else next(counted_class._counter)
self._counted_class = counted_class
[docs] def count(self):
"""Get count."""
return self._count