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.
TypeError: super() argument 1 must be type, not classobj (Python)

If you've got an error message like this, you've called up a method from the base class of your object using "new style classes", but the base class is an "old style class". The full error message looks something like this:

Traceback (most recent call last):
  File "cl_n.py", line 24, in <module>
    testgroup = [train("First Great Western cl 150",80,2)]
  File "cl_n.py", line 10, in __init__
    super(train,self).__init__(about)
TypeError: super() argument 1 must be type, not classobj


Here's the full failing source code of my example:

class pubtrans:
  def __init__(self,about):
    self.info = about
  def getabout(self):
    return self.info
  def getvehicles(self):
    return 1
class train(pubtrans):
  def __init__(self,about,vehicle_capacity,coaches):
    super(train,self).__init__(about)
    self.vc = vehicle_capacity
    self.nc = coaches
  def getcapacity(self):
    return self.vc * self.nc
  def getvehicles(self):
    return self.nc
class bus(pubtrans):
  def __init__(self,about,vehicle_capacity):
    super(bus,self).__init__(about)
    self.vc = vehicle_capacity
  def getcapacity(self):
    return self.vc
if __name__ == "__main__":
  testgroup = [train("First Great Western cl 150",80,2)]
  testgroup.append(bus("First Avon and Somerset",81))
  testgroup.append(bus("Faresaver",29))
  testgroup.append(train("South West Trains cl 159",75,3))
  format = "%-30s %4d %d"
  tpc = 0
  tvc = 0
  for option in testgroup:
    text = option.getabout()
    pass_count = option.getcapacity()
    veh_count = option.getvehicles()
    tpc += pass_count
    tvc += veh_count
    print format % (text, pass_count, veh_count)
  print format % (" --- TOTAL ---",tpc,tvc)


The problem is that the base class is an old style class because it's defined without any inheritance, whereas the extended classes / derived classes / subclasses are using the new style super call. There are two ways of solving the problem.

The first (and infinitely preferable) is to switch to new style classes by having the base class inherit from object - it's as easy as changing:
  class pubtrans:
to
  class pubtrans(object):

The second option (not recommended, as it retains old style classes which are not supported in Python 3) is to call up the constructor of the base class directly rather than using the super call. In other words, in my example the two lines:
  super(train,self).__init__(about)
  super(bus,self).__init__(about)

would both become:
  pubtrans.__init__(self,about)

The complete source code of the new style example is here and of the old style example is here.

P.S. It runs, when corrected, like this:

Dorothy-2:2 grahamellis$ python cl_o.py
First Great Western cl 150 160 2
First Avon and Somerset 81 1
Faresaver 29 1
South West Trains cl 159 225 3
--- TOTAL --- 495 7
Dorothy-2:2 grahamellis$

(written 2009-09-18, updated 2009-09-19)

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


Back to
Robust user input (exception handling) example in Python
Previous and next
or
Horse's mouth home
Forward to
Removal of technical resources from this site
Some other Articles
Sanity checking the price, and selling up to increase income
Autumn Fruits and Bristol Old Station
Further North - long summer days and lovely countryside
Removal of technical resources from this site
TypeError: super() argument 1 must be type, not classobj (Python)
Robust user input (exception handling) example in Python
Testing code in Python - doctest, unittest and others
Pound Sign in Python Program
But I am reading from a file - no need to prompt (Perl)
Low Sun - Autumn is here
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/2409_Typ ... thon-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb