Some problems with classes

2008-08-31 Thread ssecorp
Why/how is it possible to add variables like this? I don't understand
this mechanism:
http://docs.python.org/tut/node11.html#SECTION001133

class Employee:
pass

john = Employee() # Create an empty employee record

# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000

---

Also, I can't get multiple inheritance to work.

Don't mind that the a vegan obviously don't inherit from an animal and
a vegetable. I didn't come up with anything better, it is just to
learn about inheritance.


class Animal(object):
def __init__(self, name, weight):
self.name = name
self.weight = weight

def speak(self):
print "speak"

class Vegetable(object):
def __init__(self, name, volume):
self.name = name
self.volume = volume

def split(self):
print "tjoff"

class Vegan(Animal, Vegetable):
#pass
def __init__(self, name, attacks):
self.name = name
self.attacks = attacks

>>>

Traceback (most recent call last):
  File "C:/Python25/Progs//Movie.py", line 42, in 
class ActionComedy(Movie, ActionMovie):
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases Movie, ActionMovie
>>>


also, when inheriting, can I inherit __init__() somehow? If I want the
same attributes but perhaps some additional methods for example.

--
http://mail.python.org/mailman/listinfo/python-list


Re: Some problems with classes

2008-08-31 Thread Chris Rebert
On Sun, Aug 31, 2008 at 6:39 PM, ssecorp <[EMAIL PROTECTED]> wrote:
> Why/how is it possible to add variables like this? I don't understand
> this mechanism:
> http://docs.python.org/tut/node11.html#SECTION001133

Under the covers, Python objects are implemented using dictionaries,
so adding an attribute just adds a new key-value pair to the object's
internal dictionary (which, incidentally, you can access as
someobj.__dict__).

>
> class Employee:
>pass
>
> john = Employee() # Create an empty employee record
>
> # Fill the fields of the record
> john.name = 'John Doe'
> john.dept = 'computer lab'
> john.salary = 1000
>
> ---
>
> Also, I can't get multiple inheritance to work.
>
> Don't mind that the a vegan obviously don't inherit from an animal and
> a vegetable. I didn't come up with anything better, it is just to
> learn about inheritance.
>
>
> class Animal(object):
>def __init__(self, name, weight):
>self.name = name
>self.weight = weight
>
>def speak(self):
>print "speak"
>
> class Vegetable(object):
>def __init__(self, name, volume):
>self.name = name
>self.volume = volume
>
>def split(self):
>print "tjoff"
>
> class Vegan(Animal, Vegetable):
>#pass
>def __init__(self, name, attacks):
>self.name = name
>self.attacks = attacks
>

>
> Traceback (most recent call last):
>  File "C:/Python25/Progs//Movie.py", line 42, in 
>class ActionComedy(Movie, ActionMovie):
> TypeError: Error when calling the metaclass bases
>Cannot create a consistent method resolution
> order (MRO) for bases Movie, ActionMovie

The class names in error message here don't match the classes you
declared above. Give us the actual code you're using or at least a
stub version.


>
>
> also, when inheriting, can I inherit __init__() somehow? If I want the
> same attributes but perhaps some additional methods for example.

Use super() to call your superclasses' __init__() methods. See
super()'s entry in http://docs.python.org/lib/built-in-funcs.html for
more info.

- Chris

>
> --
> http://mail.python.org/mailman/listinfo/python-list
>

-- 
Follow the path of the Iguana...
http://rebertia.com
--
http://mail.python.org/mailman/listinfo/python-list


Re: Some problems with classes

2008-08-31 Thread ssecorp
class Animal(object):
def __init__(self, name, weight):
self.name = name
self.weight = weight

def speak(self):
print "speak"

class Vegetable(object):
def __init__(self, name, volume):
self.name = name
self.volume = volume

def split(self):
print "tjoff"

class Vegan(Animal, Vegetable):
def __init__(self, name, attacks):
self.name = name
self.attacks = attacks
--
http://mail.python.org/mailman/listinfo/python-list


Re: Some problems with classes

2008-08-31 Thread ssecorp
also, how does super() work more exactly? I can't get it quite to
work.


class Movie(object):
def __init__(self, movieId, grades, date):
self.movieId = movieId
self.grades = grades
self.date = date

def newGrade(self, grade):
self.grades.append(grade)

def spam(self):
print "inherits all the way down?"

def averageGrade(self):
 return sum(grade for grade in self.grades) / \
len(self.grades)

class ActionMovie(Movie):
super(Movie)
##def __init__(self, movieId, grades, date, kills):
##self.movieId = movieId
##self.grades = grades
##self.date = date
##self.kills = kills

def newGrade(self, grade, date):
self.grades.append(grade)
self.date = date

def prd(self):
print self.date

class Comedy(ActionMovie):
def __init__(self, movieId, grades, date):
self.movieId = movieId
self.grades = grades
self.date = date

def donk(self):
print "im a donkey!"


subclasses has to be indented?
class C(B):
def meth(self, arg):
super(C, self).meth(arg)
--
http://mail.python.org/mailman/listinfo/python-list


Re: Some problems with classes

2008-08-31 Thread ssecorp
It works when I inherit from 2 classes but not when I inherit from 2
subclasses.


-

from __future__ import division

class Movie(object):
def __init__(self, movieId, grades, date):
self.movieId = movieId
self.grades = grades
self.date = date

def newGrade(self, grade):
self.grades.append(grade)

def spam(self):
print "inherits all the way down?"

def averageGrade(self):
 return sum(grade for grade in self.grades) / \
len(self.grades)

class ActionMovie(Movie):
#super(Movie, self)
def __init__(self, movieId, grades, date, kills):
self.movieId = movieId
self.grades = grades
self.date = date
self.kills = kills

def newGrade(self, grade, date):
self.grades.append(grade)
self.date = date

def prd(self):
print self.date

class Comedy(ActionMovie):
def __init__(self, movieId, grades, date):
self.movieId = movieId
self.grades = grades
self.date = date

def donk(self):
print "im a donkey!"

##class ActionComedy(Movie, ActionMovie):
##def __init__(self, movieId, grades, date):
##self.movieId = movieId
##self.grades = grades
##self.date = date



class Animal(object):
def __init__(self, name, weight):
self.name = name
self.weight = weight

def speak(self):
print "speak"

class Vegetable(object):
def __init__(self, name, volume):
self.name = name
self.volume = volume

def split(self):
print "tjoff"

class Vegan(Animal, Vegetable):
#pass
#super()
def __init__(self, name, attacks):
self.name = name
self.attacks = attacks

--
http://mail.python.org/mailman/listinfo/python-list


Re: Some problems with classes

2008-08-31 Thread Michele Simionato
On Sep 1, 3:39 am, ssecorp <[EMAIL PROTECTED]> wrote:
>
> Traceback (most recent call last):
>   File "C:/Python25/Progs//Movie.py", line 42, in 
>     class ActionComedy(Movie, ActionMovie):
> TypeError: Error when calling the metaclass bases
>     Cannot create a consistent method resolution
> order (MRO) for bases Movie, ActionMovie

The MRO is explained here:
http://www.python.org/download/releases/2.3/mro/

Super is explained here:
http://www.artima.com/weblogs/index.jsp?blogger=micheles

Be warned that those are not readings for a beginner, but
if you want to use multiple inheritance and super you must
be prepared ;)
--
http://mail.python.org/mailman/listinfo/python-list


Re: Some problems with classes

2008-09-01 Thread Bruno Desthuilliers

Chris Rebert a écrit :

On Sun, Aug 31, 2008 at 6:39 PM, ssecorp <[EMAIL PROTECTED]> wrote:

Why/how is it possible to add variables like this? I don't understand
this mechanism:
http://docs.python.org/tut/node11.html#SECTION001133


Under the covers, Python objects are implemented using dictionaries,


Not necessarily.


so adding an attribute just adds a new key-value pair to the object's
internal dictionary (which, incidentally, you can access as
someobj.__dict__).


Idem.
--
http://mail.python.org/mailman/listinfo/python-list