Can parameters be contra- or covariant in Python?
Here are some general thoughts on how contra- and co-variance issues affect programming in dynamically typed languages.

Covariance: If B is a subtype of B' then functions A $\rightarrow$ B form a subtype of A $\rightarrow$ B'.

Contrvariance: If A is a subtype of A' then functions A' $\rightarrow$ B form a subtype of A $\rightarrow$ B.

For example, if Auto is a subtype of Vehicle, then the contravariance rule says that a function that takes a Vehicle argument can be regarded as a function taking an Auto argument (because the Auto can be regarded as a Vehicle).  However, a function taking an Auto argument cannot be treated as a function that takes a Vehicle argument.  If you do, then sooner or later, you might pass it a non-Auto argument, say a Bicycle, and you would get a run-time error.

Whether the language is statically typed or dynamically typed makes little difference to the logic you use to design programs.  If the language is statically typed, the type checker would complain about the design flaws in your program that show up as type-mismatches.  If it is dynamically typed, you are likely to get a run-time type error such as "message not understood".  That is if you are lucky.  If you are unlucky, the problem would go unnoticed during testing, and the program would crash in the hands of the end-user.