Скажем, у меня есть класс:
class Data():
def __init__(self):
self.scores = []
self.encoding= {1: 'first', 2: 'second', 3:'third'}
def build():
self.scores = [1, 2, 3]
def translate(self):
return [self.encoding[score] for val in self.scores]
Теперь я хочу иметь возможность переводить столбцы для данного объекта данных ...
# I want to be able to do
d= Data()
d.scores.translate()
# AttributeError: 'list' object has no attribute 'translate'
# Instead of
d= Data()
d.translate()
Теперь я полностью осведомленчто я пытаюсь получить доступ к методу, который НЕ существует для этого списка (translate ()).Я хочу иметь возможность выполнять вызовы методов, как упомянуто выше (d.scores.translate ()), потому что у меня может быть некоторая конкретная часть d.scores, которую я хочу перевести.
Например, если d.scores был вложенным пустым массивом (я хочу перевести только первые 5 столбцов, но сохранить все строки)
#this is what I would like to be able to do
d.scores[:, 1:5].translate()
# And I don't want to build a kwarg in the translate method to handle it like
d.scores.translate(indices=[1])
Я знаю, что это больше вопрос реализациии мне интересно, какой должна быть лучшая практика.
Пытаюсь ли я воткнуть квадратный колышек в круглое отверстие в этой точке?Должен ли я просто сдаться и определить функцию модуля или рассмотреть kwargs?Это что-то более "питоническое"?
ОБНОВЛЕНИЕ
Я должен был сказать это раньше, но я попытался использовать маршрут kwarg и staticmethod.Я просто хочу знать, есть ли другие способы сделать это?Может быть, через подклассы?или эквивалент Python взаимодействия в Java / C # (если он существует?)