Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
 
Python and Tcl - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Lua, etc
 
all variables are objects

Python is a truly object oriented language, where every variable is an object, and every piece of code is a method. That means that even a named block of code is an object, held in a named variable and that even an operator like "+" is really just a shorthand for a method call - __add__ in this case.

The result is a very efficient language which, once you learn how to use it, has a flexibility beyond your dreams.

Here's a sample piece of code in which we're defining a class of clothing ... adding clothes together adds the weight of each piece of clothing, and combines the colours as a string adding in the word "and" in between - a typical use of an overloaded operator in Python.

"""Demonstration that in Python ...
all operations are methods
all variables (including code) are objects
all blocks are defined using insets.
"""

class clothing:
  """ A simple class with a constructor and two
  property accessors. We also redefine addition
  and the equality test for clothing """

  def __init__(self,colour,weight):
    self.colour=colour
    self.weight=weight

  def getcolour(self):
    return self.colour

  def getweight(self):
   return self.weight

  def __add__(self,second):
    result = clothing(self.colour,self.weight)
    result.weight += second.weight
    result.colour += " and " + second.colour
    return result

  def __eq__(first,second):
    if first.weight == second.weight and \
        first.colour == second.colour: return 1
    return 0

# Test code - to be run only if this file is
# run standalone

if __name__ == "__main__":
  wearing = []
  wearing.append(clothing("blue",1.0))
  wearing.append(clothing("brown",1.25))
  # Following lines both run the __add__ method
  outfit = wearing[0] + wearing[1]
  wearing.append(outfit)
  wearing.append(outfit.__add__(wearing[1]))
  # Following lines show that methods are objects
  print wearing.append
  print wearing[0].getcolour
  for haveon in wearing:
    print "I am wearing something coloured",haveon.getcolour(),
    print "And weighing",haveon.getweight(),"kgs"

Here's what you'll see when you run that code

[localhost:~/ipy] graham% python address
<built-in method append of list object at 0x3c38a0>
<bound method clothing.getcolour of <__main__.clothing instance at 0x40a580>>
I am wearing something coloured blue And weighing 1.0 kgs
I am wearing something coloured brown And weighing 1.25 kgs
I am wearing something coloured blue and brown And weighing 2.25 kgs
I am wearing something coloured blue and brown and brown And weighing 3.5 kgs
[localhost:~/ipy] graham%


See also Object Orientation in Python

Please note that articles in this section of our web site were current and correct to the best of our ability when published, but by the nature of our business may go out of date quite quickly. The quoting of a price, contract term or any other information in this area of our website is NOT an offer to supply now on those terms - please check back via our main web site

Related Material

Object Oriented Python
  [4721] When to check an object type - Python isinstance example - (2016-11-03)
  [4650] Why populate object with values as you construct them? - (2016-02-18)
  [4591] From single block to structure and object oriented programming - (2015-12-02)
  [4448] What is the difference between a function and a method? - (2015-03-04)
  [4129] Simple OO demonstration in C++, comparison to Python - (2013-07-01)
  [4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
  [4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
  [3947] this or self - what are they, and what is the difference? (Python) - (2012-12-08)
  [3878] From Structured to Object Oriented Programming. - (2012-10-02)
  [3673] Object oriented or structured - a comparison in Python. Also writing clean regular expressions - (2012-03-26)
  [3436] Moving from scripting to Object Orientation in Python - (2011-09-13)
  [3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
  [3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
  [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2017] Python - a truly dynamic language - (2009-01-30)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
  [1306] Python class rattling around - (2007-08-16)
  [900] Python - function v method - (2006-10-20)
  [834] Python makes University Challenge - (2006-08-15)
  [477] Class, static and unbound variables - (2005-10-25)

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)
  [4649] Object and Static methods - what is the difference; example in Python 3 - (2016-02-17)
  [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)

resource index - Python
Solutions centre home page

You'll find shorter technical items at The Horse's Mouth and delegate's questions answered at the Opentalk forum.

At Well House Consultants, we provide training courses on subjects such as Ruby, Lua, Perl, Python, Linux, C, C++, Tcl/Tk, Tomcat, PHP and MySQL. We're asked (and answer) many questions, and answers to those which are of general interest are published in this area of our site.

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2019: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01225 708225 • FAX: 01225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/solutions/python-a ... jects.html • PAGE BUILT: Wed Mar 28 07:47:11 2012 • BUILD SYSTEM: wizard