As you can see above, although we intended to use our loop for a duck, the
code had no problem executing the flys() method for our goose
object as well. However, since our goose can’t quack, python threw an
error.
In other words, since python allows duck typing it assumed that since the
Goose fly’s like a duck, it must be a duck. The language later decides that
since it doesn’t quack like a duck, it can’t be a duck.
This is decided at runtime. Which is why the fly() message will execute
before throwing the error.
Is Duck Typing Bad And When Is It Useful?
So, is duck typing bad? As with everything in programming, it depends. Duck
typing is not inherently good or bad and can be argued on both oppositions.
Disadvantages of Duck Typing
The biggest disadvantage of duck typing is that it leaves the responsibility
of writing clean error-free code in the hands of the developer. This can be a
big issue if working with an inexperienced programmer or when taking on a
project that was passed along to you.
Poorly written duck typing code can lead to long and painful hours debugging a
program that should never have needed debugging to begin with. This can then
lead to costly development time and more working hours.
Additionally, if you had a type system that checked for errors on compile, it
makes it much easier for IDEs to complain as you’re typing. Allowing you to
find bugs faster and making them much easier to fix. With duck typing, errors
are discovered during runtime, which makes it harder to go back and fix past
mistakes.
Advantages of Duck Typing
Alternatively, duck typing has plenty of positives. After all, there is a
reason that so many newer languages allow this functionality. The first
advantage is that it leads to fewer lines of code. This makes it look cleaner;
thus making your code easier to read and faster to write.
It can be hard to see the advantages of duck typing until you have used
languages with and without it. Afterward, you will realize it makes your job a
lot easier when you’re not dealing with interfaces (such as in Java or C#) or
keeping track of what type your object is. Assuming you don’t fall into bad
practices, it really is useful functionality!