Honestly this reeks of Hungarian Notation. Or to be more correct about it badly applied Hungarian Notation.
Hungarian Notation was meant to express type information that the programming language could not. For example in Assembly it is helpful to know if you are dealing with a pointer to a string, or an int. The language isn't going to track this for you so a local naming standard encoding the type information is particularly helpful.
However this falls flat on its face in languages which have expressive type systems that can encode this information outside of the name. This could by by designating the type as
abstract for example or only providing
protected constructors only available to deriving types.
A good example of poorly applied Hungarian Notation is the
I in a C# interface name like
Comparable is a sufficiently good name, and the fact that its an interface is surfaced easily enough by looking at its definition, or through an ide.
So i'd ask. Does this language allow me to express in the type system that this class is available for derivation? If so then drop the
Base and just call it
Car. It easy enough to identify that
Model-Y derives from
If the language does not support this ability, then I'd consult in order: You organisational naming conventions, the platform/language naming standards/conventions, the strict need to express this information at all in the name.