Oct-04-2021, 12:44 AM
(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 99Usage:
>>> # 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