Я хочу иметь возможность создавать имена переменных, фактически экземпляры класса. Использование будет похоже на следующее:
S1 = Ship(name,lat,lon,length,beam,time,classification)
S2 = Ship(name,lat,lon,length,beam,time,classification)
SN = Ship(name,lat,lon,length,beam,time,classification)
Я не знаю, сколько там будет кораблей, но их могут быть десятки тысяч, так что о составлении списка или словаря идентификаторов заранее не может быть и речи. У каждого корабля будет имя (например, SS Hornblower), положение (широта и долгота), длина, ширина, время и классификация (грузовой, пассажирский, буксир и т. д.). S — это идентификаторы или имена, которые код дает каждому кораблю при его обнаружении. Причина в том, чтобы иметь возможность позже (через несколько минут) вспомнить их данные для сравнения и других целей: S2.getLat(), S3.getLat()...
В настоящее время я делаю идентификатор, объединяя символ «S» с числом (1,2,3, ...) по мере поступления информации о каждом корабле, но «S1», «S2» ... являются строками, а не переменными, и я не знаю, как сделать переменную из строки. Весь процесс должен быть автоматизирован. Никто не может вводить идентификаторы кораблей для сравнения или расчетов, поскольку данные поступают очень быстро. Какие-либо предложения?
Ship
неприемлем (хотя я не могу представить, почему бы и нет, если только ваш компьютер все еще не использует КБ вместо ГБ…), 50 000 отдельныхShip
переменных определенно не будет приемлемым. - person abarnert   schedule 19.08.2018namedtuple
илиDataFrame
здесь? 50000 это ничто для современного компьютера. Использованиеnamedtuple
сопряжено со множеством ограничений, которые здесь могут быть неуместны —Ship
будет неизменяемым, его можно будет использовать (случайно) как кортеж или итерируемый объект и т. д. И результат все равно больше, чем класс__slots__
(или@dataclass
/@attr.s
). Не говоря уже о том, что это полностью ортогонально проблеме — вам все равно нужно объяснить, как создавать и получать доступ к этим 50000 объектам, независимо от того, являются ли они экземплярамиnamedtuple
или обычного класса. - person abarnert   schedule 19.08.2018Ship
, у вас есть только строки в таблице. Иногда это то, что вы хотите, но когда это не так, переосмысление всего вашего кода и уменьшение его читабельности только для экономии 1 МБ памяти обычно не стоит того. - person abarnert   schedule 19.08.2018namedtuple
чем-то поможет. У вас все еще есть 50000 экземпляров класса; единственное отличие состоит в том, что эти экземпляры также являются кортежами, хотите вы этого или нет, и что класс определяется по-другому. К какому из этих преимуществ вы стремитесь? - person abarnert   schedule 19.08.2018__hash__
по сравнению с использованием namedtuple со словарем, но, возможно, я что-то забыл. - person LinkBerest   schedule 19.08.2018