Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

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

Y300 - Python 3 - What is new, what's changed and why
  [753] Python 3000 - the next generation - (2006-06-09)
  [1788] Python 2 to Python 3 / Python 3000 / Py3k - (2008-09-07)
  [1791] The road ahead - Python 3 - (2008-09-10)
  [2277] Python classes / courses - what version do we train on? - (2009-07-10)
  [2285] Great new diagrams for our notes ... Python releases - (2009-07-13)
  [2559] Moving the product forward - ours, and MySQL, Perl, PHP and Python too - (2010-01-01)
  [2778] Learning to program in Python 2 ... and / or in Python 3 - (2010-05-24)
  [2871] Moving from Python 2.6 to Python 3 - (2010-07-14)
  [4469] Sorting in Python 3 - and how it differs from Python 2 sorting - (2015-04-20)
  [4470] Testing in Python 3 - unittest, doctest and __name__ == __main__ too. - (2015-04-21)
  [4590] Progress on moving from Python 2 to Python 3 - training for both versions - (2015-12-01)
  [4650] Why populate object with values as you construct them? - (2016-02-18)
  [4711] Convering from Python 2 to Python 3 - an update, and the 2to3 utility - (2016-10-30)
  [4712] A reminder of the key issues to consider in moving from Python 2 to Python 3 - (2016-10-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
4759 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, 96 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., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
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: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb