Python/Django: синоним типа "тип" в модели базы данных (зарезервированный встроенный символ)
Я создал проект django. Он содержит модельный класс с атрибутом "type. Я думаю, что" тип" является наиболее подходящим термином для описания этого поля, поскольку он определяет вид записи.
class Vehicle(models.Model):
TYPE = (
(u'car', u'Car'),
(u'motorcycle', u'Motorcycle'),
(u'airplane', u'Airplane'),
)
type = models.CharField(max_length=100, choices=TYPE)
Мне не нравятся "добрые" или "категории", потому что они не такие общие, как "тип".
Проблема
Assignment to reserved built-in symbol: type
- Это предупреждение, так же как и проблема?
- Если да, то какие у меня варианты?
- Есть ли у вас хорошая альтернатива термину "тип"?
Ответы
Ответ 1
- Всегда плохая идея иметь имя переменной, которое затеняет одну из
встроенные python. Это путает людей, читающих ваш код, которые ожидают, что тип будет означать что-то конкретное. Менее важно, чем читаемость для других пользователей, он также может отбрасывать подсветку синтаксиса.
- Переименуйте переменную. (на самом деле это лучшее, что можно сделать - вы можете оставить его, но переименуйте сейчас, пока это легко).
- Существует много потенциальных параметров, возможно
classification
или category
. Я знаю, что ты сказал, что тебе не нравится category
, но я не вижу, что не является общим для него?
Возможно, это будет излишним для вашего конкретного приложения (нужно будет знать больше), но django поддерживает наследование модели.
Ответ 2
Я не согласен с другими ответами. Нет необходимости изменять это.
По моему мнению, существует небольшой риск путаницы, так как вы никогда не получите доступ к атрибуту, кроме как через экземпляр. my_vehicle.type
не просто смутить (например) type(my_vehicle)
.
Ответ 3
Ну, предупреждение или ошибка, я бы всегда избегал рисковать такой ситуацией:) Лучше, на мой взгляд, вы можете изменить имя переменной, не теряя смысла и сплоченности. Вы можете назвать это "v_type", что означает тип транспортного средства сокращенным образом, если он используется только для этого конкретного класса. Если вы расширите этот класс, вы расширите его другим типом транспортного средства, поэтому в вашем случае "v_type" будет соответствовать.