My question is related to this question Is enforcing an abstract method implementation unpythonic? . I am using abstract classes in python but I realize that there is nothing that stops the user from implementing a function that takes an argument that is totally different from what was intended for the base class. Therefore, I may have to check the type of the argument. Isn't that unpythonic?
How do people use abstract classes in python?
Short answer: yes it is unpythonic. It might still make sense to have an abstract base class to check your implementations for completeness. But the pythonic way to do it is mostly just duck-typing, i.e. assume that the object you work with satisfies the specification you expect. Just state these expectations explicitly in the documentation.
Actually you typically would not do a lot of these safety checks. Even if you would check types, one might still be able to fake that at runtime. It also allows users of your code to be more flexible as to what kind of objects they pass to your code. Having to implement an ABC every single time clutters their code a lot.