Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python, Lua, Tcl, C and C++ training - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Java, Ruby, MySQL and Linux / Tomcat systems
 
Python Properties - how and why

When you're being taught Object Oriented Programming, you'll usually be encouraged to access all the various elements within each object through methods rather than by going directly at the variables that hold properties within the object directly. And yet this will often result (depending on the language) in you having to write a whole series of short property accessor functions. Here's an example of the sort of thing that I mean in Python:

  def setPubyear(self,year):
    self.pubyear = year
  
  def getPubyear(self):
    return self.pubyear


The reason you're taught (and I, too, teach) the use of methods rather than direct variable access is because it gives you a far greater flexibility later on. Hard coding variable names within objects into applications makes those variables a part of the API (Application Program Interface) and the provider of the class is then constrained in future enhancements. And that's a double constraint, because there's no intermediate code layer in which features that may become necessary (capitalisation, space trimming, logging access etc) can be added. In other words - by directly accessing variables, you're building up a potential update and maintenance problem.

But wouldn't it be nice in the application to be able to access properties / attributes of an object as if they were simple variables, rather than having to use the extended syntax of calling setter and getter methods? Well - in Python you can, using a property. Here's how it works:

• within your class, you declare that variable name = property (getter, setter, deleter, doc) where getter, setter and deleter are the methods to run when a property is called up. You'll always need to provide a getter (otherwise there's little point in trying to define a property), but the other parameters are optional.

• within your application, you access the property as if it was a variable within the object, but within the class it gets diverted to the code.

Example:

Defining a property:
  author = property(lambda x:x._author , None)

Making use of that property:
  print nineteen.author

Complete example - [here] from the course I've been giving in Oxford for the last couple of days. And that gives me an excuse to illustrate my post with a picture I took when walking into the location at which I was training along the River Thames

(written 2013-05-18, updated 2013-05-25)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
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)
  [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)
  [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
More things to make sure that we do NOT do ...
Previous and next
or
Horse's mouth home
Forward to
Django - first steps - Updated
Some other Articles
Using object orientation for non-physical objects
Melksham Chamber of Commerce - Report for AGM, 21st May 2013
Perl design patterns example
Django - first steps - Updated
Python Properties - how and why
More things to make sure that we do NOT do ...
Identity in Python
A reminder of why we opened Well House Manor for our customers
Test Driven Development in Python - Customer Comes First
Quick and easy - showing Python data hander output via a browser
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/4094_Pyt ... d-why.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat