(Oct-03-2021, 11:13 PM)Skaperen Wrote: it has been my understanding that a def somewhere creates a function and that a def inside a class make that function be referenced in that class' methods table. does it work some other way?
It dos not work the way you explain here.
To explain a little that may clear it up.
If want a function inside class then need to use
@staticmethod
,just a
def
inside a class make no sense and don't work.
What's make
def
a method is the use of
self
.
The reason to use
staticmethod
is if you have something that could be written as a standalone function (not part of any class),
but you want to keep it within the class because it's somehow semantically related to the class.
import math
class AClass:
def foo(self):
'''A method because of self'''
return 42
@staticmethod
def circle_area(r):
'''
A normal function knows nothing about the class or instance
It's still bound to the class and can be called
'''
return r ** 2 * math.pi
def bar():
'''Make no sense and should not be here'''
return 99
Usage:
>>> # Do not require a class instance creation
>>> AClass.circle_area(5)
78.53981633974483
>>>
>>> obj = AClass()
>>> obj.foo()
42
>>> obj.circle_area(5)
78.53981633974483
>>> obj.bar()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: bar() takes 0 positional arguments but 1 was given