Подтвердить что ты не робот

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
  • Это предупреждение, так же как и проблема?
  • Если да, то какие у меня варианты?
  • Есть ли у вас хорошая альтернатива термину "тип"?
4b9b3361

Ответ 1

  • Всегда плохая идея иметь имя переменной, которое затеняет одну из встроенные python. Это путает людей, читающих ваш код, которые ожидают, что тип будет означать что-то конкретное. Менее важно, чем читаемость для других пользователей, он также может отбрасывать подсветку синтаксиса.
  • Переименуйте переменную. (на самом деле это лучшее, что можно сделать - вы можете оставить его, но переименуйте сейчас, пока это легко).
  • Существует много потенциальных параметров, возможно classification или category. Я знаю, что ты сказал, что тебе не нравится category, но я не вижу, что не является общим для него?

Возможно, это будет излишним для вашего конкретного приложения (нужно будет знать больше), но django поддерживает наследование модели.

Ответ 2

Я не согласен с другими ответами. Нет необходимости изменять это.

По моему мнению, существует небольшой риск путаницы, так как вы никогда не получите доступ к атрибуту, кроме как через экземпляр. my_vehicle.type не просто смутить (например) type(my_vehicle).

Ответ 3

Ну, предупреждение или ошибка, я бы всегда избегал рисковать такой ситуацией:) Лучше, на мой взгляд, вы можете изменить имя переменной, не теряя смысла и сплоченности. Вы можете назвать это "v_type", что означает тип транспортного средства сокращенным образом, если он используется только для этого конкретного класса. Если вы расширите этот класс, вы расширите его другим типом транспортного средства, поэтому в вашем случае "v_type" будет соответствовать.