Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #39060 > unrolled thread

Struggling with program

Started bymaiden129 <sengokubasarafever@gmail.com>
First post2013-02-17 18:29 -0800
Last post2013-02-18 17:49 +1100
Articles 4 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  Struggling  with program maiden129 <sengokubasarafever@gmail.com> - 2013-02-17 18:29 -0800
    Re: Struggling  with program Dave Angel <davea@davea.name> - 2013-02-17 21:49 -0500
    Re: Struggling  with program Michael Torrie <torriem@gmail.com> - 2013-02-17 20:49 -0700
    Re: Struggling with program Chris Angelico <rosuav@gmail.com> - 2013-02-18 17:49 +1100

#39060 — Struggling with program

Frommaiden129 <sengokubasarafever@gmail.com>
Date2013-02-17 18:29 -0800
SubjectStruggling with program
Message-ID<5d90a61d-f122-4dd4-8d79-c9909662b2bc@googlegroups.com>
I'm trying to do this assignment and it not working, I don't understand why...

This is what I have to do:

Write the definition of a class  Player containing: 
An instance variable  name of type  String , initialized to the empty String.
An instance variable  score of type  int , initialized to zero.
A method called  set_name that has one parameter, whose value it assigns to the instance variable  name .
A method called  set_score that has one parameter, whose value it assigns to the instance variable  score .
A method called  get_name that has no parameters and that returns the value of the instance variable  name .
A method called  get_score that has no parameters and that returns the value of the instance variable  score .
 No constructor need be defined. 

Here is my code:

class Player:

	
	name = ''
	
	def __init__(self,score = 0)
	
	def set_name (self):
		self.name

	def set_score (self):
		self.score

	def get_name
		return name
	
	def  get_score
		return score

can someone please help me?

[toc] | [next] | [standalone]


#39061

FromDave Angel <davea@davea.name>
Date2013-02-17 21:49 -0500
Message-ID<mailman.1919.1361155785.2939.python-list@python.org>
In reply to#39060
On 02/17/2013 09:29 PM, maiden129 wrote:

First question:  What version of Python are you writing this for? 
Version 2.x has slightly different rules than version 3.x


> I'm trying to do this assignment and it not working, I don't understand why...
>

Define "working."  Do you mean you get a syntax error when you try to 
run it?  If so, then post the full traceback, which will point to the 
location of the error, (or sometimes the next line or two).

> This is what I have to do:
>
> Write the definition of a class  Player containing:
> An instance variable  name of type  String , initialized to the empty String.
> An instance variable  score of type  int , initialized to zero.
> A method called  set_name that has one parameter, whose value it assigns to the instance variable  name .
> A method called  set_score that has one parameter, whose value it assigns to the instance variable  score .
> A method called  get_name that has no parameters and that returns the value of the instance variable  name .
> A method called  get_score that has no parameters and that returns the value of the instance variable  score .
>   No constructor need be defined.
>
> Here is my code:
>
> class Player:

If this is Python 2.x, then you want to derive from object, not just 
make a standalone class.

>
> 	
> 	name = ''

Have you read the Python tutorial page at:
      http://docs.python.org/2/tutorial/classes.html
That's assuming you're writing for Python 2.7.

python doesn't have instance variables, they're called instance data 
attributes.  Have you defined name as an instance attribute, or a class 
attribute?


> 	
> 	def __init__(self,score = 0)

Without a colon, this is a syntax error.
And without a body, it's another syntax error.
> 	
> 	def set_name (self):

Where is the parameter to hold the new name?

> 		self.name

This references the instance attribute, but doesn't modify it.
>
> 	def set_score (self):
> 		self.score
>
> 	def get_name
>

No parens, no parameters, no colon.

		return name
> 	
> 	def  get_score

ditto

> 		return score
>
> can someone please help me?
>


-- 
DaveA

[toc] | [prev] | [next] | [standalone]


#39064

FromMichael Torrie <torriem@gmail.com>
Date2013-02-17 20:49 -0700
Message-ID<mailman.1920.1361159410.2939.python-list@python.org>
In reply to#39060
On 02/17/2013 07:29 PM, maiden129 wrote:
> I'm trying to do this assignment and it not working, I don't
> understand why...
> 
> This is what I have to do:
> 
> Write the definition of a class  Player containing: An instance
> variable  name of type  String , initialized to the empty String. An
> instance variable  score of type  int , initialized to zero. A method
> called  set_name that has one parameter, whose value it assigns to
> the instance variable  name . A method called  set_score that has one
> parameter, whose value it assigns to the instance variable  score . A
> method called  get_name that has no parameters and that returns the
> value of the instance variable  name . A method called  get_score
> that has no parameters and that returns the value of the instance
> variable  score . No constructor need be defined. can someone please
> help me?

While no one here is willing to do homework for someone else we do like
to help out however we can.

As Dave alluded to, python "instance variables" are called attributes
and typically are initialized in the the __init__(self, ...) method of
the class.  The "self" name, however, can be anything you want.  For
consistency, most python programmers use "self."

So your assignment is a bit misleading when it says a constructor is not
required, because if you want to initialize some instance attributes, it
has to be done in a method, usually the constructor, which in Python is
__init__.

"Instance variables" always need to be referred to with an explicit self
parameter.  This is always the first parameter of any method
declaration. Thus you would define things kind of like so:

---------------------
from __future__ import print_function #in case python2

class MyClass(object):
    def __init__(self, var2):
	# create instance attributes and assign them values
        self.instance_variable = 5
        self.instance_variable2 = var2

    def print_values(self):
        print("instance_variable is {0}, and instance_variable2 is
{1}".format(self.instance_variable, self.instance_variable2))

if __name__ == "__main__":
    c = MyClass(10); # this passes 10 to the __init__ method
    c.print_values() # note there is no self parameter passed;
                     # python passes "c" for you implicitly.
----------------------

If you run this python snippet you get this as output:

instance_variable is 5, and instance_variable2 is 10

[toc] | [prev] | [next] | [standalone]


#39073 — Re: Struggling with program

FromChris Angelico <rosuav@gmail.com>
Date2013-02-18 17:49 +1100
SubjectRe: Struggling with program
Message-ID<mailman.1927.1361170192.2939.python-list@python.org>
In reply to#39060
On Mon, Feb 18, 2013 at 1:29 PM, maiden129 <sengokubasarafever@gmail.com> wrote:
> Write the definition of a class  Player containing:
> An instance variable  name of type  String , initialized to the empty String.
> An instance variable  score of type  int , initialized to zero.
> A method called  set_name that has one parameter, whose value it assigns to the instance variable  name .
> A method called  set_score that has one parameter, whose value it assigns to the instance variable  score .
> A method called  get_name that has no parameters and that returns the value of the instance variable  name .
> A method called  get_score that has no parameters and that returns the value of the instance variable  score .
>  No constructor need be defined.

Is this actually a Python assignment? This sounds decidedly
un-Pythonic. A much more idiomatic way to write this would simply be
(with the explicit subclassing of object optional in Python 3):

class Player(object):
    pass

You can then create a player thus:

fred = Player()

And set his name and score:

fred.name = "Fred"
fred.score = 1024

And get them just as easily:

print("Name: "+fred.name)
print("Score: "+str(fred.score))

Note how much code I wrote to make all this possible: None. In Java
and C++, the convention is to hide internal members, on the off-chance
that you might need to change a trivial getter/setter pair into
something more complicated (though in my experience, this almost never
can be done so simply even if you _have_ the getter and setter - the
only situation that that model serves is logging/breakpoints); in
Python, you get the same benefit without them, thanks to some spiffy
features that you probably don't need to worry about the details of at
the moment.

The only thing that I might want to change in the above code is to
create an __init__ member that initializes all the "normal" members -
possibly to its arguments, letting you do fred=Player("Fred",1024), or
possibly to some sort of default value. This serves as documentation
and also saves checking for AttributeError when reading from the
object. But otherwise, there's nothing in there that Python hasn't
already done for you.

ChrisA

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web