Используется ли слово «слот» для обозначения чего-либо, кроме __slot__? (в python или в программировании в целом) - PullRequest
0 голосов
/ 23 апреля 2020

Мне трудно понять строку документации класса Agent в следующем коде:
source: AIMA Repository - Python, agents.py module

class Agent(Thing):
    """An Agent is a subclass of Thing with one required slot,
    .program, which should hold a function that takes one argument, the
    percept, and returns an action. (What counts as a percept or action
    will depend on the specific environment in which the agent exists.)
    Note that 'program' is a slot, not a method. If it were a method,
    then the program could 'cheat' and look at aspects of the agent.
    It's not supposed to do that: the program can only look at the
    percepts. An agent program that needs a model of the world (and of
    the agent itself) will have to build and maintain its own model.
    There is an optional slot, .performance, which is a number giving
    the performance measure of the agent in its environment."""

    def __init__(self, program=None):
        self.alive = True
        self.bump = False
        self.holding = []
        self.performance = 0
        if program is None or not isinstance(program, collections.abc.Callable):
            print("Can't find a valid program for {}, falling back to default.".format(self.__class__.__name__))

            def program(percept):
                return eval(input('Percept={}; action? '.format(percept)))

        self.program = program

    def can_grab(self, thing):
        """Return True if this agent can grab this thing.
        Override for appropriate subclasses of Agent and Thing."""
        return False

Строка do c говорит, что program и performance являются слотами, и эта программа определена таким образом, чтобы предотвратить cheat, исходя из моего понимания, для того, чтобы у класса были слоты, должен быть определен атрибут с именем __slots__. но это не тот случай, и даже если бы это было так, целью слота является увеличение времени доступа и уменьшение использования памяти, а не предотвращение мошенничества.

Также, если инкапсуляция предназначена для предотвращения мошенничества, то это все равно не имеет смысла, поскольку Python не имеет эффективного механизма ограничения доступа к переменным класса.

Я понимаю, что программа должна быть определена как функция (а не метод) , так что разные агенты могут иметь разные программы, поэтому:

  • Действительно ли термин «слот» используется для передачи этого значения?
  • Если это так, это правильно? использование слова 'slot'?
  • self не передается программе , если она определена как функция, поэтому она не может обмануть?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...