Source code for negmas.situated.adapter

from __future__ import annotations
from .agent import Agent
from .entity import Entity

__all__ = ["Adapter"]


[docs] class Adapter(Agent): """ Represents an adapter agent that makes some included object act as an agent in some world. Args: obj: The object to be adapted. include_adapter_type_name: Whether to include the adapter type name. If None, then it will be included if it does not start with and underscore. include_obj_type_name: Whether to include object type name in this adapter's type name type_postfix: A string to add to the end of the type name Remarks: - Other than keeping an internal copy of the adapted object under `obj`, this class is used primarily to provide a way to give good type_name and short_type_name properties that combine the name of the adapter and the name of the enclosed object nicely. - The adapted object must be an `Entity`. - The `World` class uses the type names from this adapter whenever it needs to get a type-name (either `type_name` or `short_type_name`) """ def __init__( self, obj, include_adapter_type_name: bool | None = None, include_obj_type_name=True, **kwargs, ): super().__init__(**kwargs) if include_adapter_type_name is None: include_adapter_type_name = not self.__class__.__name__.startswith("_") self._obj = obj self._include_adapter, self._include_obj = ( include_adapter_type_name, include_obj_type_name, ) @property def adapted_object(self) -> Entity: return self._obj @adapted_object.setter def adapted_object(self, x: Entity) -> Entity: self._obj = x return x @property def short_type_name(self): """Returns a short name of the type of this entity""" base = super().short_type_name if self._include_adapter else "" obj = self._obj.short_type_name if self._include_obj else "" return base + ":" + obj @property def type_name(self): """Returns a short name of the type of this entity""" base = super().type_name if self._include_adapter else "" obj = self._obj.type_name if self._include_obj else "" return base + ":" + obj
[docs] def init(self): """Override this method to modify initialization logic""" self._obj.init()
[docs] def step(self): """Override this method to modify stepping logic""" self._obj.step()
def __getattr__(self, attr): return getattr(self._obj, attr)