python tutorial - Python - class method vs static method - learn python - python programming




Methods

  • Method is just a function object created by def statement.
def outside_foo():
click below button to copy the code. By Python tutorial team

class method

  • If we need to use class attributes
@classmethod
def cfoo(cls,)
click below button to copy the code. By Python tutorial team

static method

  • We do not have any info about the class
@staticmethod
def sfoo() 
click below button to copy the code. By Python tutorial team

Instance method

  • Instance method but inner working of instance method is the same as the class method. Actually, Python automatically maps an instance method call to a class method.
instance.method(args...)
click below button to copy the code. By Python tutorial team

Class Method and Instance Method

  • The method foo() is designed to process instances, we normally call the method through instance:
>>> from a import A
>>> a = A()
>>> a.foo('instance call')
instance call
click below button to copy the code. By Python tutorial team

Note: that we pass the instance a as an argument of the foo() method.

1:Bound method (instance call):

  • To call the method we must provide an instance object explicitly as the first argument. In other words, a bound method object is a kind of object that remembers the self instance and the referenced function.
  • Python automatically packages the instance with the function in the bound method object, so we don't need to pass an instance to cal the method.
>>> class Callback:
...   def __init__(self, color):
...     self.color = color
...   def changeColor(self):
...     print(self.color)
... 
>>> obj = Callback('red')
>>> cb = obj.changeColor
>>> cb()
red
click below button to copy the code. By Python tutorial team

2:Unbound method (class call):

  • Accessing a function attribute of a class by qualifying the class returns an unbound method object:
>>> Callback.changeColor
<unbound method Callback.changeColor>
click below button to copy the code. By Python tutorial team

Note: In Puython 3.0, the notion of unbound method has been dropped, and what we describe as an unbound method here is treated as a simple function in 3.0.

Static Method

  • Static methods are used when we need to process data associated with classes instead of instances. A static method has no self argument and it is nested in a class and is designed to work on class attributes instead of instance attributes.
  • I'll use function decorator(@) for static method, and the syntax looks like this:
class S:
   @staticmethod
   def foo():
      ...
click below button to copy the code. By Python tutorial team
  • Internally, the definition has the same effect as the name rebinding:
class S:
   def foo():
      ...
   foo = staticmethod(foo)
click below button to copy the code. By Python tutorial team
  • Suppose we have a typical instance counting code like this:
# s.py
class S:
   nInstances = 0
   def __init__(self):
      S.nInstances = S.nInstances + 1

   @staticmethod
   def howManyInstances():
      print('Number of instances created: ', S.nInstances)
click below button to copy the code. By Python tutorial team
  • Then, we make three instances:
>>> from s import S
>>> 
>>> a = S()
>>> b = S()
>>> c = S()
click below button to copy the code. By Python tutorial team
  • Now that we have static method, we can call it in two ways:
    • call from class
    • call from instances
>>> S.howManyInstances()
('Number of instances created: ', 3)
>>> a.howManyInstances()
('Number of instances created: ', 3)
click below button to copy the code. By Python tutorial team

Instance, static, and class methods

  • Here is a simple code that has all types of methods:
class Methods:
  def i_method(self,x):
    print(self,x)

  def s_method(x):
    print(x)

  def c_method(cls,x):
    print(cls,x)

  s_method = staticmethod(s_method)
  c_method = classmethod(c_method)

obj = Methods()

obj.i_method(1)
Methods.i_method(obj, 2)

obj.s_method(3)
Methods.s_method(4)

obj.c_method(5)
Methods.c_method(6)
click below button to copy the code. By Python tutorial team

Output:

(<__main__.Methods instance at 0x7f7052d75950>, 1)
(<__main__.Methods instance at 0x7f7052d75950>, 2)
3
4
(<class __main__.Methods at 0x7f7052d6d598>, 5)
(<class __main__.Methods at 0x7f7052d6d598>, 6)

Related Searches to Python - class method vs static method

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We don't have any banner, Flash, animation, obnoxious sound, or popup ad. We do not implement these annoying types of ads!

We need money to operate the site, and almost all of it comes from our online advertising.

Please add wikitechy.com to your ad blocking whitelist or disable your adblocking software.

×