BUG: ExcelWriter's engine and supported_extensions are properties
State: closed

`engine` and `supported_extensions` are declared to be properties in `ExcelWriter` but sub-classes simply assign variables to them. While the differences are subtle, we should either consistently use properties or variables (pyright doesn't like mixing them; mypy doesn't seem to care).

There are more cases where a sub-class does not use a property (found by pyright when enabling reportGeneralTypeIssues):
<details>

```
pandas/core/arrays/datetimes.py:193:20 - error: Expression of type "_scalar_type" cannot be assigned to declared type "property"
pandas/core/arrays/interval.py:200:12 - error: Expression of type "Literal[1]" cannot be assigned to declared type "property"
pandas/core/arrays/period.py:165:20 - error: Expression of type "_scalar_type" cannot be assigned to declared type "property"
pandas/core/arrays/string_.py:94:12 - error: Expression of type "Literal['string']" cannot be assigned to declared type "property"
pandas/core/arrays/string_.py:97:16 - error: Expression of type "NAType" cannot be assigned to declared type "property"
pandas/core/arrays/timedeltas.py:132:20 - error: Expression of type "_scalar_type" cannot be assigned to declared type "property"
pandas/core/dtypes/dtypes.py:176:12 - error: Expression of type "Literal['category']" cannot be assigned to declared type "property"
pandas/core/dtypes/dtypes.py:670:16 - error: Expression of type "NaTType" cannot be assigned to declared type "property"
pandas/core/dtypes/dtypes.py:1045:12 - error: Expression of type "Literal['interval']" cannot be assigned to declared type "property
pandas/core/dtypes/dtypes.py:1394:16 - error: Expression of type "NAType" cannot be assigned to declared type "property"
pandas/core/indexes/numeric.py:372:20 - error: Expression of type "_engine_type" cannot be assigned to declared type "property"
pandas/core/indexes/numeric.py:387:20 - error: Expression of type "_engine_type" cannot be assigned to declared type "property"
pandas/core/indexes/numeric.py:402:20 - error: Expression of type "_engine_type" cannot be assigned to declared type "property"
pandas/core/indexes/range.py:104:20 - error: Expression of type "_engine_type" cannot be assigned to declared type "property"
pandas/core/internals/array_manager.py:706:12 - error: Expression of type "Literal[2]" cannot be assigned to declared type "property
pandas/core/internals/base.py:158:12 - error: Expression of type "Literal[1]" cannot be assigned to declared type "property"
pandas/core/internals/blocks.py:1981:20 - error: Expression of type "Literal[True]" cannot be assigned to declared type "property"
pandas/core/internals/managers.py:1671:23 - error: Expression of type "Literal[True]" cannot be assigned to declared type "property"
pandas/plotting/_matplotlib/core.py:1038:13 - error: Expression of type "Literal['scatter']" cannot be assigned to declared type "property"
pandas/plotting/_matplotlib/core.py:1126:13 - error: Expression of type "Literal['hexbin']" cannot be assigned to declared type "property"
pandas/plotting/_matplotlib/core.py:1156:13 - error: Expression of type "Literal['line']" cannot be assigned to declared type "property"
pandas/plotting/_matplotlib/core.py:1423:13 - error: Expression of type "Literal['bar']" cannot be assigned to declared type "property"
pandas/plotting/_matplotlib/core.py:1606:13 - error: Expression of type "Literal['pie']" cannot be assigned to declared type "property"
pandas/plotting/_matplotlib/hist.py:171:19 - error: Expression of type "Literal['vertical']" cannot be assigned to declared type "property"
```

Labels:
name: Bug
name: IO Excel
description: read_excel, to_excel

Comments:
maybe they should all be variables, as at least `engine` is asserted to be string and not a property?
https://github.com/pandas-dev/pandas/blob/afec0e9c1b2856cf28071327141a0ac0e4ba8aee/pandas/io/excel/_util.py#L46
@rhshadrach Based on your recent PR to make `book` a property, I assume that you would prefer making `engine`/`supported_extensions` a property in the sub-classes as well (i.e., changing `klass.engine` to `klass._engine` in `register_writer` to avoid the above assert).
@twoertwein - Yes, I'd lean toward a property rather than a method here. The most compelling reason to me is that keeps the API from changing.

But this is a really good catch, I didn't realize the subtle inconsistency.
Thanks @twoertwein!