Define an __init__ method that has all the field names as parameters (in the order they appear in the second argument to pnamedtuple) and initializes every instance name (using these same names) with the value bound to its parameter. For Point described above, the __init__ method would be

Respuesta :

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">

<html><head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

 <title>Program 3</title>

</head>

<body bgcolor="white">

<center>

<h1>Program 3</h1>

<h1>

Programs that Write Programs: pnamedtuple

</h1>

<p>

</p><h2>ICS-33: Intermediate Programming<br>

</h2>

<p>

</p></center>

<!-- Introduction -->

<a name="Introduction">

<hr align="left" width="33%">

<table rules="none" border="0" cellpadding="5" cellspacing="0" width="100%">

<tbody>

<tr valign="top">

<td width="20%"><b>Introduction</b></td>

<td width="80%">

This programming assignment is designed to show how Python functions can define

 other Python code (in this case, a class) in an unexpected way: the function

 can build a huge string that represents the definition of a Python class and

 then call <b>exec</b> on it, which causes Python to define that class just as

 if it were written in a file and imported (in which case Python reads the

 file as a big string and does the same thing).

Your code will heavily rely on string formatting operations: I suggest using

 the <b>str.format</b> method to do the replacements: now is a good time to

 learn about this function if you don't know already know it; but you are free

 to use whatever string processing tool(s) you want.

<p>

I suggest that you first read the description below and define/test/debug as

 much of the <b>Point</b> class as you can, writing it directly in Eclipse

(especially the<b>__getitem__</b>, <b>__eq__</b>, and <b>_replace__</b>

 methods).

You might want to write a small batch file to help you test this class.

</p><p>

Once you have written/debugged the code for the <b>Point</b> class, define the

 general <b>pnamedtuple</b> function, which when given the appropriate

 arguments (for the <b>Point</b> class: <b>pnamedtuple('Point', 'x y')</b>)

 constructs a huge string containing the same code as the <b>Point</b> class

 you wrote.

Much of the code from your <b>Point</b> class will be turned into strings and

 made generic: generalized for calls to <b>pnamedtuple</b> with different

 arguments.

Use the <b>.format</b> method to replace the generic parts with the actual

 strings needed for the class being defined.