<div dir="ltr"><span style="font-size:12.8000001907349px">I would like Python to have a strong typing feature that can co-exist with the current dynamic typing system. Currently Python is like this:</span><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><div style="font-size:12.8000001907349px">    var animal = Factory.make("dog")  # okay.</div><div style="font-size:12.8000001907349px">    var dog = Factory.make("dog")       # okay.</div><div style="font-size:12.8000001907349px">    var cat = Factory.make("dog")        # are you sure?</div></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">I would like Python to also be able to also do this:</span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><div style="font-size:12.8000001907349px">    Animal a = Factory.make("dog")    # okay. Dog is Animal.</div><div style="font-size:12.8000001907349px">    Dog d = Factory.make("dog")         # okay. Dog is Dog.</div><div style="font-size:12.8000001907349px">    Cat c = Factory.make("cat")           # Runtime error. Dog is not Cat.</div></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">With a strong typing option that performs runtime type checking, the reader can be certain that the program is running the type they expect. Also, the IDE can be more helpful. Example:</span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style=""><div style=""><span style="font-size:12.8000001907349px">    var dog = Factory.make("dog")  # okay</span></div><div style=""><span style="font-size:12.8000001907349px">    dog. (Ctr+Space)                       # Auto-complete lists only Animal methods.</span></div><div style=""><span style="font-size:12.8000001907349px"><br></span></div><div style=""><span style="font-size:12.8000001907349px">    Dog d = Factory.make("dog")     # okay. Dog is dog.</span></div><div style=""><span style="font-size:12.8000001907349px">    d. (Ctr+Space)                            # Auto-complete lists methods for Dog and Animal.</span></div></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">In C++, this could be implemented by using dynamic_cast or typeinfo / typeid. The interpreter look for an uppercase word followed by a lowercase word followed by "=" and then it check the type on the right side of the "=" at runtime and see if it is an instance of the (uppercase) type on the left side of the "=". If not, the interpreter throws a runtime error that says something like "Type Dog is not instance of type Cat. Line: 45". </span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">This feature can be completely optional and could be integrated without anyone noticing. If it is integrated, only the people who want this type safety would have to use it. If there is a performance penalty, it would mainly affect the people who use this feature. Given that a lot of people transition from C/C++/Java to Python, I think that this feature would be intuitive to many users and a good addition for people who like type safety.</span></div></div>