<br><br><div class="gmail_quote">On Sun, Oct 25, 2009 at 8:06 PM, Khalid Al-Ghamdi <span dir="ltr">&lt;<a href="mailto:emailkgnow@gmail.com">emailkgnow@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr">Hi everybody,<div>So I&#39;m new to python and have questions about the following code:</div><br><div><div><div><div>    def __init__(self, name):</div>
<div>        &#39;&#39;&#39;initializes the data&#39;&#39;&#39;</div><div>        <a href="http://self.name" target="_blank">self.name</a>=name</div><div>        print (&#39;initializing {0}&#39;.format(<a href="http://self.name" target="_blank">self.name</a>))</div>
<div>    </div><div>droid1 = Robot(&#39;D23&#39;)</div><div><br></div></div></div><div><br></div><div>1- In the class definition above, I don&#39;t get the &quot;<a href="http://self.name" target="_blank">self.name</a>=name&quot;. I understand that the self is supposed to refer to the actual object, but since it is an initialization method, there is no way to enter a name in place of the arguments.</div>
</div></div></blockquote><div><br>Self refers to the object currently being created by the &quot;init&quot; method, so it is always the first parameter to __init__.  You can call it &#39;s&#39; or &#39;foobar&#39; or &#39;self&#39; or &#39;cantaloupe&#39;, it doesn&#39;t matter.  It&#39;s just always the first argument.<br>
&quot;<a href="http://self.name">self.name</a> = name&quot; means &quot;take the second argument that is passed to the __init__ method and assign it to the current object under the &quot;name&quot; attribute.<br>Imagine if you were constructing a car.<br>
<br>class Car(object):<br>    def __init__(self, doors, chassis):<br>        self.doors = doors<br>        self.chassis = chassis<br><br>You are passing these parameters to the car so that they can be applied to the specific car.<br>
For example, you could then do<br>mychassis = &quot;Dodge Ram&quot;<br>doors1 = &quot;hatchback&quot;<br>doors2 = &quot;4-door&quot;<br>car1 = Car(mychassis, doors1)<br>car2 = Car(mychassis, doors2)<br><br>Is that a little bit more clear?<br>
<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr"><div>
<div>2- in the final few lines where I assign an object to the class, I notice that a parameter was entered in the class name, &quot;Robot(D23)&quot;, although when defining the class I didn&#39;t put any arguments for it.</div>
</div></div></blockquote><div>Yes you did,<br>__init__ takes 2 parameters, &quot;self&quot; and &quot;name&quot;.  When constructing a new object via Robot(D23) you are implicitly passing &quot;self&quot; and you are explicitly passing &#39;D23&#39; as &quot;self&quot;.<br>
 <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr"><div>
<div>3- what is the difference between all the underscore, underscore attributes like:__class__&#39;, &#39;__delattr__&#39;, &#39;__doc__&#39;, &#39;__eq__&#39;, &#39;__format__&#39;, &#39;__ge__&#39;, &#39;__getattribute__&#39;, &#39;__gt__&#39;, &#39;__hash__&#39;, &#39;__init__&#39;, &#39;__le__&#39;, &#39;__lt__&#39;, &#39;__ne__&#39;, &#39;__new__&#39;, &#39;__reduce__&#39;, &#39;__reduce_ex__&#39;, &#39;__repr__&#39;, &#39;__setattr__ </div>
</div></div></blockquote><div><br>They all do different things, I&#39;m not sure what you mean by &quot;what are the differences&quot;?<br>They are functions that are called in certain situations.  For example,<br>a + b<br>
will call<br>a.__add__(b)<br><br>and<br>a[&#39;blah&#39;] = b<br>will call<br>a.__setitem__(b)<br><br>etc.<br>(these __ names may be wrong so don&#39;t quote me on them.)<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr"><div>
<div><br></div><div>and the rest of the normal methods for a class.?</div></div></div></blockquote><div><br>Depends on the class.  There are no &quot;normal methods&quot;, the methods that a class has are based upon the type of class it is.  You could have a class with no methods and only attributes (but this would be almost completely useless).<br>
<br>-Luke<br></div></div>