[Tutor] Methods that return instances of their own class?

David Perlman dperlman at wisc.edu
Thu Oct 15 17:14:51 CEST 2009


I'm trying to figure out how to define a class so that its instances  
have a method that return a different object of the same class.

In particular, I'm trying to run a simple prisoner's dilemma game, and  
I want to make a "game" object that has a method which returns the  
"game" object with the payoffs reversed; that is, the payoff matrix  
from the other player's point of view.  Basically a kind of transpose  
which is specific to this application.

class Payoffs(list):
     def __init__(self, value=None):
         list.__init__(self)
         if value==None: # use a default prisoner's dilemma
             value=[[(3,3),(0,5)],
                    [(5,0),(1,1)]]
         self.extend(value)

     def __repr__(self):
         l1="Your Choice:   Cooperate    Defect\n"
         l2="My choice:   -------------------------\n"
         l3="Cooperate    | (% 3d,% 3d) | (% 3d,% 3d) |\n" % (self[0] 
[0][0], self[0][0][1], self[0][1][0], self[0][1][1])
         l4="              ----------------------- \n"
         l5="Defect       | (% 3d,% 3d) | (% 3d,% 3d) |\n" % (self[1] 
[0][0], self[1][0][1], self[1][1][0], self[1][1][1])
         l6="             -------------------------\n"
         return l1+l2+l3+l4+l5+l6

     def transpose(self):

And that's where I'm at.  How can I have the transpose method return  
another Payoffs object?  Here's the beginning of it:

     def transpose(self):
         trans=[[(self[0][0][1],self[0][0][0]), (self[1][0][1],self[1] 
[0][0])],
                [(self[0][1][1],self[0][1][0]), (self[1][1][1],self[1] 
[1][0])]]

But now "trans" is type list, not type Payoffs.  I don't know how to  
get it into a Payoffs object so that the transpose will have my other  
new methods.


Thanks very much.  I searched for answers but I'm not sure what this  
would be called, which made it hard to find.

--
-dave----------------------------------------------------------------
Unfortunately, as soon as they graduate, our people return
to a world driven by a tool that is the antithesis of thinking:
PowerPoint. Make no mistake, PowerPoint is not a neutral tool —
it is actively hostile to thoughtful decision-making. It has
fundamentally changed our culture by altering the expectations
of who makes decisions, what decisions they make and how
they make them.  -Colonel T. X. Hammes, USMC



More information about the Tutor mailing list