Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Object and Static methods - what is the difference; example in Python 3

There are two types of methods (named pieces of code) that you can use in a class.

Object methds - occasionally called dynamic methods - operate on an object within a class ("one particular thing of a type") and will always have some way of referencing the elements (variables) within an object of the class. Depending on the language you're using, that may be the keyword self or this, or it may be the first positional parameter.

You need to set up an object before you can call object methods (on it) - that's done with a special method known as a constructor. In many languages, if you don't define you rown constructor, there's a default one for the system to fall back on. And if you deo define your own constructor (if you want to pass in initial settings, for example) it may have its own special reserved name (e.g. Python), or it may have the same name as in the class (e.g. Java)

Here's an example of the definition of a class, with object methods, and their use in Python 3:

  class square:
    def __init__(self,dimension,city):
      self.size = dimension
      self.city = city
    def getArea(self):
      return self.size * self.size
    def getEdge(self):
      return 4 * self.size
    def getCountry(self):
      return (self.city.split(", ")[1])
  
  trafalgar = square(110,"London, UK")
  plazaDeBalcarce = square(300,"Balcarce, Argentina")
  
  print ("circumference of {}m in {}".format(
    trafalgar.getEdge(), trafalgar.getCountry()))
  print ("circumference of {}m in {}".format(
    plazaDeBalcarce.getEdge(), plazaDeBalcarce.getCountry()))


Object methods will usually account for the majority of methods you define and call in a class. However, there will be times that you want to associate a utility method with a class, most commonly if you want to perform a piece of logic that relates to your data type before you've actually created any objects.Such utility methods are known as class methods or static methods and they are called 'on' the class as a whole, rather than on an individual object.

Here's an example developed from the one above where I've used a static or class method to perform a piece of logic that's inherently associated with objects of type "square", but which I potentially needed to perform before I had any objects of the type actually created - hence the need for a static.

  class square:
    def __init__(self,dimension,city):
      self.size = dimension
      self.city = city
    def getArea(self):
      return self.size * self.size
    def getEdge(self):
      return 4 * self.size
    def getCountry(self):
      return (self.city.split(", ")[1])
    def placeValidate(rawtest):
      result = len(rawtest.split(", ")) == 2
      return result
  
  edge = 77
  locate = input("Where is the square [city, country]? ")
  
  if square.placeValidate(locate):
    projected = square(edge,locate)
    print ("circumference of {}m in {}".format(
      projected.getEdge(), projected.getCountry()))
  else:
    print ("Sorry - I don't understand")


These examples are in Python 3. In other languages, you may need to declare the static method to be "static" or use a decorator such as @staticmethod or @classmethod.

In most languages, as well as calling a static method on the class, you can call it on an already existing object of the class ... you won't have a access to the elements within the object in the method if you do this, but your program will understand which particular method it is that it has to run, as their could be lots of utiities all of the same name in your code over all.

The most common use of static methods on our training courses is in what are called factory methods, where a piece of raw data - typically a text string - that has all the definitions needed to create an object is read in, and there's code needed to analyse that text string and actually call the apporpriate constructor. Such code is really utility code, and it belongs (for sharing and mainenance purposes) with the class and not with the calling code.

Sample code (first example) [here] and (second example) [here]. Both examples include sample outputs. Topic covered on our Python Programming courses.
(written 2016-02-17, updated 2016-02-18)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y300 - Python 3 - What is new, what's changed and why
  [4712] A reminder of the key issues to consider in moving from Python 2 to Python 3 - (2016-10-30)
  [4711] Convering from Python 2 to Python 3 - an update, and the 2to3 utility - (2016-10-30)
  [4650] Why populate object with values as you construct them? - (2016-02-18)
  [4590] Progress on moving from Python 2 to Python 3 - training for both versions - (2015-12-01)
  [4470] Testing in Python 3 - unittest, doctest and __name__ == __main__ too. - (2015-04-21)
  [4469] Sorting in Python 3 - and how it differs from Python 2 sorting - (2015-04-20)
  [2871] Moving from Python 2.6 to Python 3 - (2010-07-14)
  [2778] Learning to program in Python 2 ... and / or in Python 3 - (2010-05-24)
  [2559] Moving the product forward - ours, and MySQL, Perl, PHP and Python too - (2010-01-01)
  [2285] Great new diagrams for our notes ... Python releases - (2009-07-13)
  [2277] Python classes / courses - what version do we train on? - (2009-07-10)
  [1791] The road ahead - Python 3 - (2008-09-10)
  [1788] Python 2 to Python 3 / Python 3000 / Py3k - (2008-09-07)
  [753] Python 3000 - the next generation - (2006-06-09)

Y112 - Python - Objects - Intermediate
  [4719] Nesting decorators - (2016-11-02)
  [4718] Defining an object that is a modified standard type in Python - (2016-11-02)
  [4717] with in Python - examples of use, and of defining your own context - (2016-11-02)
  [4541] Setting up and tearing down with the Python with keyword - (2015-10-16)
  [4450] Deciding whether to use parameters, conditional statements or subclasses - (2015-03-05)
  [4449] Spike solution, refactoring into encapsulated object methods - good design practise - (2015-03-05)
  [4410] A good example of recursion - a real use in Python - (2015-02-01)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
  [4344] Python base and inherited classes, test harness and unit testing - new examples - (2014-12-07)
  [4094] Python Properties - how and why - (2013-05-18)
  [4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
  [3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
  [3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
  [3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
  [3472] Static variables in functions - and better ways using objects - (2011-10-10)
  [3442] A demonstration of how many Python facilities work together - (2011-09-16)
  [3002] A list of special method and attribute names in Python - (2010-10-17)
  [2994] Python - some common questions answered in code examples - (2010-10-10)
  [2905] Defining static methods in Python - (2010-08-05)
  [2889] Should Python classes each be in their own file? - (2010-07-27)
  [2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
  [2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
  [2722] Mixins example in Python - (2010-04-14)
  [2720] Multiple inheritance in Python - complete working example - (2010-04-14)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2693] Methods that run on classes (static methods) in Python - (2010-03-25)
  [2485] How do I set up a constant in Python? - (2009-10-31)
  [2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
  [2368] Python - fresh examples of all the fundamentals - (2009-08-20)
  [1819] Calling base class constructors - (2008-10-03)
  [1661] Equality, sameness and identity - Python - (2008-05-31)
  [1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
  [1517] Python - formatting objects - (2008-01-24)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
  [964] Practical polymorphism in action - (2006-12-04)
  [903] Pieces of Python - (2006-10-23)
  [831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [477] Class, static and unbound variables - (2005-10-25)
  [383] Overloading of operators on standard objects in Python - (2005-07-19)
  [296] Using a Python dictionary as a holder of object attributes - (2005-04-30)


Back to
Why is bus funding a much hotter topic than a new set of traffic lights?
Previous and next
or
Horse's mouth home
Forward to
Why populate object with values as you construct them?
Some other Articles
Coats of arms - towns and authorities in Wiltshire
Testing new algorithms in PHP
Pressure selling in the fire safety business
Object and Static methods - what is the difference; example in Python 3
Why is bus funding a much hotter topic than a new set of traffic lights?
On the problems of a printed train timetable
Sometimes you wonder about people. And perhaps you should not.
What are callbacks? Why use them? An example in Python
In your room at Well House Manor, Melksham, Wiltshire
4750 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2017: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4649_Obj ... hon-3.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat