Python 3 лучший способ функции частного объекта - PullRequest
0 голосов
/ 20 февраля 2019

Я бы хотел изменить массив NumPy и отправить его в нейронную сеть для прогнозирования, вместо того, чтобы вызывать reshape и создать новый объект (который должен быть дорогим). Я хотел бы иметь более быстрый код - сохранить функцию "private" в переменной /объект правильной формы и просто скопировать значения в этот объект

это лучший питонический способ создать эту переменную __reshaped_board, как показано ниже?Основная идея с использованием начальных подчеркиваний состоит в том, чтобы сигнализировать, что это частная переменная, и не использовать ее:)

def predict_move(self, board, __reshaped_board=np.zeros([1, 4, 4, 1])):
    np.copyto(__reshaped_board[0, :, :, 0], board)
    return self.model.predict(__reshaped_board)

одно из возможных решений - оставить copyto вне этой функции, но вызов этой функции в нескольких местах приведет ктребуется сделать упаковщик / декоратор для этой функции

!!Я имею в виду, что этот объект будет создан один раз, когда интерпретатор оценит определение функции, и если где-то я переназначу эту ссылку, то оригинальный объект будет потерян

1 Ответ

0 голосов
/ 20 февраля 2019

Помимо других недостатков (плохая читаемость, способность вызывающих программ ошибочно передавать 2 параметра в ваш метод), ваш метод собирается совместно использовать эти данные во всех экземплярах вашего объекта.Это то, что вы хотите?

что не так с атрибутом экземпляра, который будет хранить ваше хранилище на протяжении всей жизни объекта?

def __init__(self):
    self.__reshaped_board = np.zeros([1, 4, 4, 1]

def predict_move(self, board):
    np.copyto(self.__reshaped_board[0, :, :, 0], board)
    return model.predict(self.__reshaped_board)

, если вы хотите делиться между всеми экземплярами, просто определите свою переменную снаружи __init__ для создания переменной класса.

 class Whatever:
     __reshaped_board = np.zeros([1, 4, 4, 1]
...