Reasoning of calling a method on class object instead of class instance object
Ben Finney
ben+python at benfinney.id.au
Mon Mar 18 19:55:08 EDT 2019
Arup Rakshit <ar at zeit.io> writes:
> class RefrigeratedShippingContainer(ShippingContainer):
> # ...
>
> @staticmethod
> def _c_to_f(celsius):
> return celsius * 9/5 + 32
>
> @staticmethod
> def _f_to_c(fahrenheit):
> return (fahrenheit - 32) * 5/9
Both those functions are decorated with ‘staticmethod’. That means
<URL:https://docs.python.org/3/library/functions.html#staticmethod>
that the function will, unlike typical methods, not automatically
receive any implicit first argument. That's why the function signature
has no ‘self’ or ‘klass’ or the like.
> If I call `_c_to_f`, `_f_to_c` methods on `self` instead of
> `RefrigeratedShippingContainer` class object, still it works.
That's right, and is indeed the point of making a static method on a
class. From the above documentation link:
[A staticmethod-decorated function] can be called either on the
class (such as `C.f()`) or on an instance (such as `C().f()`). The
instance is ignored except for its class.
> So what is the reason behind of this calling on the class object,
> instead class instance object?
Whichever makes the most sense in the code where that function is
called.
The purpose of a static method is to imply that, though the function
*could* be entirely separate from any class, it is conceptually part of
a spacific class's behaviour.
In the specific example you show, I expect the code maintenance was
deemed to be easier when the RefrigeratedShippingContainer encapsulates
the conversions of temperature units.
--
\ “When we pray to God we must be seeking nothing — nothing.” |
`\ —Francis of Assisi |
_o__) |
Ben Finney
More information about the Python-list
mailing list