private void printClassDefinition(PrintWriter printer, String indent) {
		if (!isPublic(el)) {
			printer.print(indent);
			printer.println("@typing.type_check_only");
		}
		if (doclet.isDeprecated(el)) {
			String msg = doclet.getDeprecatedMessage(el);
			if (msg != null) {
				// a message is required
				// if one is not present, don't apply it
				printer.print(indent);
				printer.print("@deprecated(");
				printer.print(msg);
				printer.println(')');
			}
		}
		printer.print(indent);
		printer.print("class ");
		printer.print(getName());

		String base = getSuperClass();
		if (base == null) {
			// edge case, this is java.lang.Object
			printer.println(":");
			indent = indent(indent);
			writeJavaDoc(printer, indent);
			printer.println();
			return;
		}

		Stream<String> bases;
		if (el.getInterfaces().isEmpty()) {
			bases = Stream.of(base);
		}
		else if (base.equals(OBJECT_NAME)) {
			// Object base isn't needed
			bases = getInterfaces();
		}
		else {
			bases = Stream.concat(Stream.of(base), getInterfaces());
		}

		List<String> typeParams = getClassTypeVars();
		if (!typeParams.isEmpty()) {
			String type = el.getQualifiedName().toString();
			String genericBase = getGenericBase(type, typeParams);
			bases = Stream.concat(bases, Stream.of(genericBase));
		}

		Iterator<String> it = bases.iterator();
		String baseList = String.join(", ", (Iterable<String>) () -> it);
		if (!baseList.isEmpty()) {
			printer.print("(");
			printer.print(baseList);
			printer.print(")");
		}
		printer.println(":");
		indent = indent(indent);
		if (getNestedTypes().isEmpty() && getFields().isEmpty() && getMethods().isEmpty()) {
			writeJavaDoc(printer, indent, "...");
		}
		else {
			writeJavaDoc(printer, indent);
		}
		printer.println();
	}
Prints the first part of the Python class definition

@param printer the printer
@param indent the indentation
GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubType.java