4 ms·
The `add1` method should be declared static
by varav 12y ago
The `add1` method should be declared static
- chriswarbo 12y ago`add1` isn't a method, it's a function. Besides, "static methods" are a hack: If it's a behaviour of the class rather than its instances, then make it a method of the class. You'd only need static methods for this if your language doesn't treat classes as objects (ie. it's not a particularly OO language). The example is in Python, where classes are objects, so no statics are needed. Alternatively, it may be a completely standalone piece of code, in which case it has no business being inside a class. Just make it a standalone function, and stick it in a module to avoid name clashes. You'd only need static methods for this if your language doesn't allow standalone functions, or doesn't have a module system. Since Python has both, there's no need to abuse classes like that.
- varav 12y agoPlease read the article. I was referring to the method in the Java example. You cannot access `add1` from main since main is static
- chriswarbo 12y agoAh yes, I replied too soon :) Still, it's just a Java quirk that's irrelevant to the article.
- ninjaplease 12y agoPython's differentiation of class methods and static methods is very much a pythonism and seems (to my mind, not really a pythonista) mostly due to the strange semantics around passing self-reference via first argument; Java's static methods and Ruby's class methods (for example) are equivalent.
- the_af 12y agoThe add1 method was declared non static on purpose, to illustrate static type checking.
- shawabawa3 12y agoNo it wasn't. Even if the type checker passed the compilation would fail because it's trying to call a non static method from a static method
- the_af 12y agoOh, you're right, it's unintended. I didn't see the author tried to trigger a type-check error with an argument "a" of the wrong type. However, failing compilation because you're calling a non-static method from a static context is also a kind of static checking, so the author's example still works, just in unintented ways.