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