pymor.core.base¶
This module provides base classes from which most classes in pyMOR inherit.
The purpose of these classes is to provide some common functionality for
all objects in pyMOR. The most notable features provided by BasicObject
are the following:
BasicObjectsets classUberMetaas metaclass which itself inherits fromabc.ABCMeta. Thus it is possible to define interface classes with abstract methods using theabstractmethoddecorator. There are also decorators for abstract class methods, static methods, and properties.Using metaclass magic, each class deriving from
BasicObjectcomes with its ownloggerinstance accessible through itsloggerattribute. The logger prefix is automatically set to the class name.Logging can be disabled and re-enabled for each instance using the
BasicObject.disable_loggingandBasicObject.enable_loggingmethods.
BasicObject.uidprovides a unique id for each instance. Whileid(obj)is only guaranteed to be unique among all living Python objects,BasicObject.uidwill be (almost) unique among all pyMOR objects that have ever existed, including previous runs of the application. This is achieved by building the id from a uuid4 which is newly created for each pyMOR run and a counter which is increased for any object that requests an uid.If not set by the user to another value,
BasicObject.nameis set to the name of the object’s class.
ImmutableObject derives from BasicObject and adds the following
functionality:
Using more metaclass magic, each instance which derives from
ImmutableObjectis locked after its__init__method has returned. Each attempt to change one of its attributes raises an exception. Private attributes (of the form_name) are exempted from this rule.
ImmutableObject.with_can be used to create a copy of an instance with some changed attributes. E.g.obj.with_(a=x, b=y)creates a copy with the
aandbattributes ofobjset toxandy.with_is implemented by creating a new instance, passing the arguments ofwith_to__init__. The missing__init__arguments are taken from instance attributes of the same name.
Module Contents¶
Classes¶
Provides unique, quickly computed ids by combining a session UUID4 with a counter. |
|
Metaclass for defining Abstract Base Classes (ABCs). |
|
Base class for most classes in pyMOR. |
|
Metaclass for |
|
Base class for immutable objects in pyMOR. |
Attributes¶
- class pymor.core.base.UID[source]¶
Provides unique, quickly computed ids by combining a session UUID4 with a counter.
- class pymor.core.base.UberMeta(cls, name, bases, namespace)[source]¶
Bases:
abc.ABCMetaMetaclass for defining Abstract Base Classes (ABCs).
Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as ‘virtual subclasses’ – these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won’t show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()).
- class pymor.core.base.BasicObject[source]¶
Base class for most classes in pyMOR.
- logger[source]¶
A per-class instance of
logging.Loggerwith the class name as prefix.
- class pymor.core.base.ImmutableMeta(cls, name, bases, namespace)[source]¶
Bases:
UberMetaMetaclass for
ImmutableObject.
- class pymor.core.base.ImmutableObject[source]¶
Bases:
BasicObjectBase class for immutable objects in pyMOR.
Instances of
ImmutableObjectare immutable in the sense that after execution of__init__, any modification of a non-private attribute will raise an exception.Warning
For instances of
ImmutableObject, the result of member function calls should be completely determined by the function’s arguments together with the object’s__init__arguments and the current state of pyMOR’s globaldefaults.While, in principle, you are allowed to modify private members after instance initialization, this should never affect the outcome of future method calls. In particular, if you update any internal state after initialization, you have to ensure that this state is not affected by possible changes of the global
defaults.- __setattr__(self, key, value)[source]¶
Depending on _locked state I delegate the setattr call to object or raise an Exception.
- with_(self, new_type=None, **kwargs)[source]¶
Returns a copy with changed attributes.
A a new class instance is created with the given keyword arguments as arguments for
__init__. Missing arguments are obtained form instance attributes with the same name.Parameters
- new_type
If not None, return an instance of this class (instead of
type(self)).**kwargsNames of attributes to change with their new values. Each attribute name has to be an argument to
__init__.
Returns
Copy of
selfwith changed attributes.