Как избежать setattr (и getattr) при использовании Python? И нужно ли избегатьPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать setattr (и getattr) при использовании Python? И нужно ли избегать

Сообщение Anonymous »

Если я хочу добавить значение в поле в буфере протокола, которое неизвестно во время компиляции, я сейчас выполняю setattr. Обычно мне не нравится использовать setattr, поскольку он кажется менее безопасным. Но когда я знаю, что объект является протобуфом, я думаю, что все в порядке, потому что значение, которое я ему присваиваю, должно быть того типа, который допускает протобуф. Так может быть, это не так уж и опасно??
Поясню на примере. Во-первых, предположим, что у меня есть этот protobuf:

Код: Выделить всё

message Person {
string first_name = 1;
string second_name = 1;
int age = 3;
}
Тогда у меня есть код, использующий приведенный выше protobuf:

Код: Выделить всё

from person_pb2 import Person

my_info = {"first_name": "Mike", "last_name": "example", "age": 999}
me = Person()
for field, value in my_info:
setattr(me, field, value)
Это очень гибкий способ обработки protobuf. Я не могу, например, указать это, как в dict, сказав me[field] = value. Тем не менее, me[field] = value совершенно безопасен. Если при использовании setattr значение имеет неправильный тип поля/атрибута, я получу ошибку: TypeError: неверный тип аргумента для встроенной операции
Итак, мне хочется сказать, что для protobufs использование setattr совершенно нормально и фактически является единственным способом программного добавления значений в поля protobuf. Это верно? Есть ли лучший или более безопасный способ? Я не могу сделать что-то вроде me.first_name = "Mike", потому что мне нужно, чтобы это было программно.

Подробнее здесь: https://stackoverflow.com/questions/788 ... cessary-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»