Magic Methods in Python can be Risky

[nz_btn text="Production Risk" link="http://casthighlight.wpengine.com/category/product/indicators-methodology/risk/" target="_self" icon="icon-office" animate="false" animation_type="ghost" color="pink" size="small" shape="rounded" type="normal" hover_normal="opacity" hover_ghost="fill"][nz_btn text="Software Resiliency" link="http://casthighlight.wpengine.com/software-resiliency/" target="_self" animate="false" animation_type="ghost" color="black" size="medium" shape="rounded" type="normal" hover_normal="fill" hover_ghost="fill" icon="icon-dashboard"][nz_btn text="Code Reliability" target="_self" animate="false" animation_type="ghost" color="black" size="small" shape="rounded" type="ghost" hover_normal="fill" hover_ghost="screen" link="http://casthighlight.wpengine.com/category/product/indicators-methodology/code-insights/software-resiliency/code-reliability/" icon="icon-code"]

Magic Methods in Python can be Risky

This code insight counts one violation each time a magic method is called, except if it is in the body of a magic method. bad
first_names = ["eve", "lisa", "robert", "paul", "alice"]
if first_names.__contains__("robert"):
    print("list of first names contains robert")

good

example 1

first_names = ["eve", "lisa", "robert", "paul", "alice"]
if "robert" in first_names:
    print("list of first names contains robert")
this example illustrate the work around for the bad example above: the __contains__ method is still called, but in background through the use of python high level mechanism, for which magic methods are intended to be used. example 2 class child_class(parent_class): def __init__(): super().__init__() def __contains__(arg1, arg2): parent_class.__contains__(arg1) print(arg2) in this example, the call to super().__init__() and parent_class.__init__() are not violation because its a call of parent's method in a context of respectively overriding and overloading
 
 

Why you should care

Magic methods (starting and ending with two underscores) should not have to be called directly unless you're overriding a method of the same name. Magic methods are used to implement specific protocols and are called for you, either due to operator access or due to some special operation.

Business Impacts

[nz_btn text="Production Risk" target="_self" animate="false" animation_type="ghost" color="pink" size="small" shape="rounded" type="normal" hover_normal="opacity" hover_ghost="fill" link="http://casthighlight.wpengine.com/category/product/indicators-methodology/innovation/" icon="icon-office"]

CAST recommendations

References

https://www.quantifiedcode.com/knowledge-base/correctness/Avoid%20calling%20magic%20methods/7dz67uIe

About CAST and Highlight’s Code Insights

Over the last 25 years, CAST has leveraged unique knowledge on software quality measurement by analyzing thousands of applications and billions of lines of code. Based on this experience and community standards on programming best practices, Highlight implements hundreds of code insights across 15+ technologies to calculate health factors of a software.
[nz_btn text="See features" link="http://casthighlight.wpengine.com/outputs-analytics/" target="_self" icon="icon-stats" animate="false" animation_type="ghost" color="black" size="small" shape="rounded" type="normal" hover_normal="fill" hover_ghost="fill"][nz_btn text="How it works" link="http://casthighlight.wpengine.com/how-it-works/" target="_self" icon="icon-cog" animate="false" animation_type="ghost" color="black" size="small" shape="rounded" type="ghost" hover_normal="fill" hover_ghost="fill"]
For reference only. For the complete details please refer the original article
https://doc.casthighlight.com/alt_magicmethods-avoid-calling-magic-methods/
Have more questions? Submit a request

Comments

Powered by Zendesk