PageSourceSearch

https://www.gidnetwork.com/b-137.html

html gidnetwork.com collected 2026-10-03 20:55:32 UTC 24,619 bytes, 315 lines download raw bytes

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
3<title>Beginning Python Tutorial (Part 12) - GIDNetwork</title>
4<meta name="generator" content="GIDTemplate 2.0" />
5<meta name="copyright" content="J de Silva" />
6<meta name="description" content="Beginner's tutorial on Python OOP and using classes" />
7<meta name="keywords" content="OOP,, classes,, Python,, beginner,, tutorial,, walkthrough,, programming,, objects" />
8<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
9<link rel="stylesheet" href="/global.css" type="text/css" title="GID Default" />
10<link rel="stylesheet" href="/gid_default.css" type="text/css" title="GID Default" />
11<link rel="shortcut icon" href="/favicon.ico" />
12<link rel="start" href="http://www.gidnetwork.com/" title="GIDNetwork - Everything's connected now." /><link rel="next" href="/b-138.html" title="JSP Power Debugger" /><link rel="prev" href="/b-136.html" title="Optimising GIDForums for Search Engines" /><link rel="alternate" href="http://www.gidnetwork.com/xml/gidnetwork-latest.rss" type="application/rss+xml" title="GIDNetwork's Most Recent" />
12<script type="text/javascript" src="/global.js"></script>
vendor: 2 bytes, line 12
12
13<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"></script>
vendor: 2 bytes, line 13
13
14<script type="text/javascript"><!--
15_uacct = "UA-55009-3"; urchinTracker(); //--></script>
vendor: 2 bytes, line 15
15
16<script type="text/javascript"><!--
17var googletag = googletag || {};
18googletag.cmd = googletag.cmd || [];
19(function() {
20var gads = document.createElement('script');
21gads.async = true;
22gads.type = 'text/javascript';
23var useSSL = 'https:' == document.location.protocol;
24gads.src = (useSSL ? 'https:' : 'http:') + 
25'//www.googletagservices.com/tag/js/gpt.js';
26var node = document.getElementsByTagName('script')[0];
27node.parentNode.insertBefore(gads, node);
28})();
29 //--></script>
vendor: 2 bytes, line 29
29
30<script type="text/javascript"><!--
31var vWidth, vHeight;
32
33if (window.innerWidth < 728) {
34	vWidth = 468; vHeight = 60;
35}
36else if (window.innerWidth < 970) {
37	vWidth = 728; vHeight = 90;
38}
39else {
40	vWidth = 970; vHeight = 90;
41}
42googletag.cmd.push(function() {
43googletag.defineSlot('/1003336/gidnetwork_'+vWidth+'_'+vHeight+'_top', [vWidth, vHeight], 'div-gpt-ad-top').addService(googletag.pubads());
44googletag.pubads().enableSingleRequest();
45googletag.enableServices();
46});
47 //--></script>
47
48</head>
49
50<body>
51  <!-- Piwik -->
52<script type="text/javascript">
53	var _paq = _paq || [];
54	_paq.push(["setCookieDomain", "*.gidnetwork.com"]);
55	_paq.push(["setDomains", ["*.gidnetwork.com"]]);
56	_paq.push(['trackPageView']);
57	_paq.push(['enableLinkTracking']);
58	(function() {
59		var u="https://pwk.gidnetwork.com/";
60		_paq.push(['setTrackerUrl', u+'piwik.php']);
61		_paq.push(['setSiteId', 3]);
62		var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
63		g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
64	})();
65</script>
65
66<!-- /Piwik -->
67<a name="top" id="top"></a>
68<div id="pg">
69  <table id="l1" cellspacing="0" cellpadding="0" border="0">
70    <tr>
71      <td rowspan="2" id="logo"><a href="http://www.gidnetwork.com/"><img src="/images/gidnetwork_logo.gif" alt="GIDNetwork Logo" title="GIDNetwork Homepage" /></a></td>
72      <td id="logoadspace">&nbsp;</td>
73    </tr>
74    <tr>
75      <td id="logoband">&nbsp;</td>
76    </tr>
77    <tr>
78      <td colspan='2'>
79        <div id='div-gpt-ad-top'>
79<script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-top'); });</script>
79</div>
80        <div class='logogradient'>&nbsp;</div>
81      </td>
82    </tr>
83    <tr>
84      <td colspan="2" id="gidsearchbar"><table id="topnav" cellspacing="0" cellpadding="0" border="0">
85  <tr>
86    <td id="topnavbc">
87      <a href="/">GIDNetwork</a> &gt; Beginning Python Tutorial (Part 12)
88    </td>
89
90    <td id="topnavbl" title="Please log in">
91      <form method="post" action="/login.php" onsubmit="md5hash(vb_login_password,vb_login_md5password,vb_login_md5password_utf)">
92        
92<script type="text/javascript" src="http://www.gidforums.com/clientscript/vbulletin_md5.js"></script>
92
93        <span><a href="http://www.gidforums.com/register.php" rel="nofollow">Register</a></span>
94        <input type="text" name="username" id="username" value="username" onfocus="if( this.value=='username' ) this.value=''; vb_login_password.value=''" maxlength="16" />
95        <input type="password" name="vb_login_password" id="vb_login_password" value="12345678" />
96        <input type="submit" id="login" name="login" value="login" />
97      </form>
98
99    </td>
100    <td id="topnavbs">
101      <form id="gidsearch" name="gidsearch" method="get" action="http://www.gidsearch.com/">
102        <input type="text" name="q" id="q" accesskey="s" maxlength="255" title="Enter your search phrase or keywords" />
103        <input type="submit" value="GIDSearch" />
104      </form>
105    </td>
106  </tr>
107</table></td>
108    </tr>
109  </table>
110
111    <table class="np">
112    <tr>
113      <td class="npl"><span class="larger bolder">&laquo;</span> <a href="/b-136.html" title="View PREVIOUS blog">Optimising GIDForums for Search Engines</a></td>
114      <td class="npr"><a href="/b-138.html" title="View NEXT blog">JSP Power Debugger</a> <span class="larger bolder">&raquo;</span></td>
115    </tr>
116  </table>
117  <table id="l2" cellspacing="0" cellpadding="0" border="0">
118    <tr>
119      <td id="mblog">
120        <h1>Beginning Python Tutorial (Part 12)</h1>
121        <div id="byline">
122          by: <a href="http://crystalattice.gidblog.com" target="_blank">crystalattice</a> - Jul 26, 2007
123
124        </div>
125        <div class="KonaBody"><h2>Getting Classier</h2><p>The last time we met I told you some of the basics about using Python classes and object-oriented programming. Today we will delve more into classes and see how they make programming life better.</p><h3>Inheritance</h3><p>First off, classes allow you to modify a program without really making changes to it. To elaborate, by subclassing a class, you can change the behavior of the program by simply adding new components to it rather than rewriting the existing components.</p><p>As we’ve seen, an instance of a class inherits the attributes of that class. However, classes can also inherit attributes from other classes. Hence, a subclass inherits from a superclass allowing you to make a generic superclass that is specialized via subclasses. The subclasses can override the logic in a superclass, allowing you to change the behavior of your classes without changing the superclass at all.</p><p>Let’s make a simple example. First make a class:</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code">&gt;&gt;&gt;class FirstClass:           #define the superclass
126…	def setdata(self, value):    #define methods
127…		self.data = value    #’self’ refers to an instance
128…	def display(self):		
129…		print self.data
130…</pre></div></span><p>Then we make a subclass:</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code">&gt;&gt;&gt;class SecondClass(FirstClass):	#inherits from FirstClass
131…	def display(self):		#redefines ‘display’
132…		print “Current value = ‘%s’” % self.data
133…</pre></div></span><p>As you can see, SecondClass “overwrites” the display method. When a FirstClass instance is created, all of its actions will be taken from the methods defined in FirstClass. When a SecondClass instance is created, it will use the inherited setdata method from FirstClass but the display method will be the one from SecondClass. </p><p>To make this easier to understand, here are some examples in practice.</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code">&gt;&gt;&gt;x=FirstClass()	#instance of FirstClass
134&gt;&gt;&gt;y=SecondClass()	#instance of SecondClass
135&gt;&gt;&gt;x.setdata(“The boy called Brian.”)
136&gt;&gt;&gt;y.setdata(42)
137&gt;&gt;&gt;x.display()
138The boy called Brian.
139&gt;&gt;&gt;y.display()
140Current value = ‘42’</pre></div></span><p>Both instances (x and y) use the same setdata method from FirstClass; x uses it because it’s an instance of FirstClass while y uses it because SecondClass inherits setdata from FirstClass. However, when the display method is called, x uses the definition from FirstClass but y uses the definition from SecondClass, where display is overridden.</p><div class="ail">
141<script type="text/javascript"><!--
142google_ad_client = "pub-0901699233733590";
143google_alternate_ad_url = "";
144google_ad_width = 300;
145google_ad_height = 250;
146google_ad_format = "300x250_as";
147google_ad_type = "text_image";
148google_ad_channel ="3396592814";
149google_color_border = "FFFFFF";
150google_color_bg = "FFFFFF";
151google_color_link = "0000FF";
152google_color_text = "000000";
153google_color_url = "000000";
154//--></script>
vendor: 2 bytes, line 154
154
155<script type="text/javascript"
156  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
157</script>
157
158</div><p>Because changes to program logic can be made via subclasses, the use of classes generally supports code reuse and extension better than traditional functions do. Functions have to be rewritten to change how they work whereas classes can just be subclassed to redefine methods.</p><p>On a final note, you can use multiple inheritance (adding more than one superclass within the parenthesis) if you need a class that belongs to different groups. In theory this is good because it should cut down on extra work. For example, a person could be a chef, a musician, a store owner, and a programmer; the person could inherit the properties from all of those roles. But in reality it can be a real pain to manage the multiple inheritance sets. You have to ask yourself, “Is it really necessary that this class inherit from all of these others?”; more often than not the answer is, “No”. </p><p>Using multiple inheritance is considered an “advanced technique” and therefore I won’t discuss it. Actually, I don’t use it; if I encounter a situation where I could use it, I will try and rethink the program’s structure to avoid using it. It’s kind of like normalizing databases; you keep breaking it down until it’s as simple as you can get it. If you still need multiple inheritance, then I recommend getting a book </p><h3>Operator Overloads</h3><p>Operator overloading simply means that objects that you create from classes can respond to actions (operations) that are already defined within Python, such as addition, slicing, printing, etc. Even though these actions can be implemented via class methods, using overloading ties the behavior closer to Python’s object model and the object interfaces are more consistent to Python’s built-in objects, hence overloading is easier to learn and use.</p><p>User-made classes can override nearly all of Python’s built-in operation methods. These methods are identified by having two underlines before and after the method name, like this: __add__. These methods are automatically called when Python evaluates operators; if a user class overloads the __add__ method, then when an expression has “+”  in it, the user’s method will be used instead of Python’s built-in method.</p><p>Using an example from Learning Python, here is how operator overloading would work in practice:</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code" style="height:307px;">&gt;&gt;&gt;class ThirdClass(SecondClass):	#is-a SecondClass
159…	def __init__(self, value):	#on “ThirdClass(value)”
160…		self.data = value
161…	def __add__(self, other):	# on “self + other”
162…		return ThirdClass(self.data + other)
163…	def __mul__(self, other):	#on “self * other”
164…		self.data = self.data * other
165…
166&gt;&gt;&gt;a = ThirdClass(“abc”)	#new __init__ called
167&gt;&gt;&gt;a.display()			#inherited method
168Current value = ‘abc’
169&gt;&gt;&gt;b = a + “xyz”		#new __add__ called: makes a new instance
170&gt;&gt;&gt;b.display()
171Current value = ‘abcxyz’
172&gt;&gt;&gt;a*3			#new __mul__ called: changes instance in-place
173&gt;&gt;&gt;a.display()
174Current value = ‘abcabcabc’</pre></div></span><p>ThirdClass is technically a subclass of SecondClass but it doesn’t override any of SecondClass’ methods. If you wanted, you could put the methods from ThirdClass in SecondClass and go from there. However, creating a new subclass allows you flexibility in your program.</p><p>When a new instance of ThirdClass is made, the __init__ method takes the instance-creation argument and assigns it to self.data.ThirdClass also overrides the “+” and “*” operators; when one of these is encountered in an expression, the instance object on the left of the operator is passed to the self argument and the object on the right is passed to other. These methods are different from the normal way Python deals with “+” and “*” but they only apply to instances of ThirdClass. Instances of other classes still use the built-in Python methods.</p><p>One final thing to mention about operator overloading is that you can make your custom methods do whatever you want. However, common practice is to follow the structure of the built-in methods. That is, if a built-in method creates a new object when called, your overriding method should too. This reduces confusion when other people are using your co
174de. Regarding the example above, the built-in method for resolving “*” expressions creates a new object (just like how the “+” method does), therefore the overriding method we created should probably create a new object too, rather than changing the value in place as it currently does. You’re not obligated to “follow the rules” but it does make life easier when things work as expected.</p><h2>Class Methods</h2><p>Instance methods (which is what we’ve been using so far) and class methods are the two ways to call Python methods. As a matter of fact, instance methods are automatically converted into class methods by Python.</p><p>Here’s what I’m talking about. Say you have a class:</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code">class PrintClass:
175	def printMethod(self, input):
176		print input
177</pre></div></span><p>Now we’ll call the class’ method using the normal instance method and the “new” class method:</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code">&gt;&gt;&gt;x = PrintClass()
178&gt;&gt;&gt;x.printMethod(“Try spam!”)	#instance method
179Try spam!
180&gt;&gt;&gt;PrintClass.printMethod(x, “Buy more spam!”)	#class method
181Buy more spam!</pre></div></span><p>So, what is the benefit of using class methods? Well, when using inheritance you can extend, rather than replace, inherited behavior by calling a method via the class rather than the instance.</p><p>Here’s a generic example:</p><span name="KonaFilter"><div class="code"><p>Generic Code Example:</p><pre class="code" style="height:307px;">&gt;&gt;&gt;class Super:
182…	def method(self):
183…		print “now in Super.method”
184…
185&gt;&gt;&gt;class Subclass(Super):
186…	def method(self):    #override method
187…		print “starting Subclass.method”    #new actions
188…		Super.method(self)    #default action
189…		print “ending Subclass.method”
190…
191&gt;&gt;&gt;x = Super()	#make a Super instance
192&gt;&gt;&gt;x.method()	#run Super.method
193now in Super.method
194&gt;&gt;&gt;x = Subclass()	#make a Subclass instance
195&gt;&gt;&gt;x.method()		#run Subclass.method which calls Super.method
196starting Subclass.method
197now in Super.method
198ending Subclass.method</pre></div></span><p>Using class methods this way, you can have a subclass extend the default method actions by having specialized subclass actions yet still call the original default behavior via the superclass. Personally, I haven’t used this yet but it is nice to know that it’s available if needed.</p><h2>Have you seen my class?</h2><p>There is more to classes than I have covered here but I think I’ve covered most of the basics. Hopefully you have enough knowledge to use them; the more you work with them the easier they are to figure out. I may have mentioned it before, but it took me almost six months to get my head around using classes. Objects were a new area for me and I couldn’t figure out how everything worked. It didn’t help that my first exposure to them was Java and C++; my two textbooks just jumped right into using objects and classes without explaining the how's and why's of them. I hope I did better explaining them than my text books did.</p><p>There are several “gotchas” when using classes, such as learning the difference between “is-a” and “has-a” relationships, but most of them are pretty obvious, especially when you get error messages. If you really get stumped, don’t be afraid to ask questions. Remember, we were all beginners once and so many of us have encountered the same problem before.</p></div>
199        <div id="multiparts"><fieldset><legend align="top">Related</legend><ul><li><a href="http://www.gidnetwork.com/b-26.html">Beginning Python Tutorial (Part 1)</a></li><li><a href="http://www.gidnetwork.com/b-27.html">Beginning Python Tutorial (Part 2)</a></li><li><a href="http://www.gidnetwork.com/b-40.html">Beginning Python Tutorial (Part 3)</a></li><li><a href="http://www.gidnetwork.com/b-55.html">Beginning Python Tutorial (Part 4)</a></li><li><a href="http://www.gidnetwork.com/b-67.html">Beginning Python Tutorial (Part 5)</a></li><li><a href="http://www.gidnetwork.com/b-68.html">Beginning Python Tutorial (Part 6)</a></li><li><a href="http://www.gidnetwork.com/b-69.html">Beginning Python Tutorial (Part 7)</a></li><li><a href="http://www.gidnetwork.com/b-74.html">Beginning Python Tutorial (Part 8)</a></li><li><a href="http://www.gidnetwork.com/b-87.html">Beginning Python Tutorial  (Part 9)</a></li><li><a href="http://www.gidnetwork.com/b-128.html">Beginning Python Tutorial (Part 10)</a></li><li><a href="http://www.gidnetwork.com/b-133.html">Beginning Python Tutorial (Part 11)</a></li></ul></fieldset></div>
200        <table id="mcomment" cellspacing="0" cellpadding="0" border="0" summary="">
201        	<tr>
202        		<td id="tdComment">
203		          <a href="http://www.gidforums.com/t-15073.html">Would you like to comment?</a> <span>This story has been viewed 86,674 times.</span>
204        		</td>
205        		<td rowspan="2" id="tdAdLink12090">
206
207<script type="text/javascript"><!--
208google_ad_client = "pub-0901699233733590";
209google_alternate_ad_url = "";
210google_ad_width = 120;
211google_ad_height = 90;
212google_ad_format = "120x90_0ads_al";
213google_ad_channel = "3396592814";
214google_color_border = "F5F5F5";
215google_color_bg = "F5F5F5";
216google_color_link = "0000FF";
217google_color_text = "000000";
218google_color_url = "000000";
219//--></script>
vendor: 2 bytes, line 219
219
220<script type="text/javascript"
221  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
222</script>
222
223
224        		</td>
225        	</tr>
226        	<tr>
227        		<td id="tdAdFull">
228
229<script type="text/javascript"><!--
230google_ad_client = "pub-0901699233733590";
231google_alternate_ad_url = "http://www.gidnetwork.com/gidcontext-miva.php?format=468x60&gid_affid=48677&color_ba=ffffff&color_bo=ffffff&color_ab=000000&color_li=0000FF&color_te=000000&color_ur=000000&q=computer+programming";
232google_ad_width = 468;
233google_ad_height = 60;
234google_ad_format = "468x60_as";
235google_ad_type = "text_image";
236google_ad_channel ="3396592814";
237google_color_border = "F5F5F5";
238google_color_bg = "FFFFFF";
239google_color_link = "0000FF";
240google_color_url = "000000";
241google_color_text = "000000";
242//--></script>
vendor: 2 bytes, line 242
242
243<script type="text/javascript"
244  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
245</script>
245
246
247        		</td>
248        	</tr>
249        </table>
250      </td>
251      <td id="mmenu">
252        <div>GIDNetwork Sites
253  <ul>
254    <li><a href='//www.gidapp.com'>GIDApp</a></li>
255    <li><a href='//www.gidblog.com'>GIDBlog</a></li>
256    <li><a href='//www.gidforums.com'>GIDForums</a></li>
257    <li><a href='//www.desilva.biz'>Learning Journal by J de Silva, The</a></li>
258  </ul>
259</div>
260
261        <div>Archives
262          <ul><li>List Unavailable</li></ul>
263        </div>
264
265        <div>Recent GIDBlog Posts
266  <ul class='latest'>
267    <li><a href='http://www.gidblog.com/track-your-favourite-4d-number-on-gidapp/'>Track Your Favourite 4D Number on GIDApp</a></li>    <li><a href='http://www.gidblog.com/yii-user-extension-includeusermodule-php-failed-to-open-stream-error/'>yii-user Extension &ldquo;include(UserModule.php): failed to open stream&rdquo; Error</a></li>    <li><a href='http://www.gidblog.com/manage-wordpress-permalink-structure-changes/'>How to change your WordPress Permalink Structure</a></li>    <li><a href='http://www.gidblog.com/popular-sharing-buttons-for-gidblog-com/'>Popular Sharing Buttons for GIDBlog.com</a></li>    <li><a href='http://www.gidblog.com/gidapp-homepage-redesign/'>GIDApp Homepage Redesign</a></li>    <li><a href='http://www.gidblog.com/yii-error-alias-user-usermodule-is-invalid/'>Yii Exception: Alias &ldquo;user.UserModule&rdquo; is invalid</a></li>    <li><a href='http://www.gidblog.com/redirect-all-subdomains-to-www/'>Redirect all subdomains to www</a></li>    <li><a href='http://www.gidblog.com/cannot-login-to-ubuntu/'>Cannot Login to Ubuntu</a></li>    <li><a href='http://www.gidblog.com/class-httpresponse-not-found/'>Class &lsquo;HttpResponse&rsquo; Not Found</a></li>    <li><a href='http://www.gidblog.com/invalid-command-rewritelog/'>Invalid command &lsquo;RewriteLog&rsquo;</a></li>
268  </ul>
269</div>
270
271        <div>Recent GIDForums Posts
272  <ul class='latest'>
273    <li><a href='http://www.gidforums.com/t-46418.html'>online manual pinless receiver</a></li>    <li><a href='http://www.gidforums.com/t-46417.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46416.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46415.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46414.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46413.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46412.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,</a></li>    <li><a href='http://www.gidforums.com/t-46411.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46410.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>    <li><a href='http://www.gidforums.com/t-46409.html'>Sell Cvv/Transfer WU/Bank/acc paypal Logins/Track 1&amp;2/Dumps,PIN/All..Country</a></li>
274  </ul>
275</div>
276
277        <div>Contact Us
278          <ul>
279            <li><a href="http://www.desilva.biz/feedback.php">Online Form</a></li>
280          </ul>
281        </div>
282      </td>
283    </tr>
284  </table>
285    <table class="np">
286    <tr>
287      <td class="npl"><span class="larger bolder">&laquo;</span> <a href="/b-136.html" title="View PREVIOUS blog">Optimising GIDForums for Search Engines</a></td>
288      <td class="npr"><a href="/b-138.html" title="View NEXT blog">JSP Power Debugger</a> <span class="larger bolder">&raquo;</span></td>
289    </tr>
290  </table>
291  <p class="smaller center bolder"><a href='#'>__top__</a></p>
292<div class="smaller center">
293	<p>Copyright &copy; <a href=http://www.gidnetwork.com/ target=#>GIDNetwork&trade;</a> 2001 - 2026</p>
294	<p>Another website by <em>J de Silva</em></p>
295	<p>Page generated in : 0.00580 sec.</p>
296        
297</div>
298</div>
299<!-- Kontera ContentLink -->
300<script type="text/javascript">
301var dc_UnitID=14;
302var dc_PublisherID=25325;
303var dc_AdLinkColor='#0000FF';
304var dc_adprod='ADL';
305</script>
vendor: 2 bytes, line 305
305
306<script type="text/javascript" src="http://kona.kontera.com/javascript/lib/KonaLibInline.js"></script>
306
307<!-- Kontera ContentLink -->
308
309
310<!-- Piwik -->
311<noscript><p><img src="https://pwk.gidnetwork.com/piwik.php?idsite=3" style="border:0;" alt="" /></p></noscript>
312<!-- /Piwik -->
313
314</body>
315</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.