﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ks Home &#187; python</title>
	<atom:link href="http://www.ksarea.com/articles/tag/python/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ksarea.com</link>
	<description>King和Sha的小窝</description>
	<lastBuildDate>Fri, 10 Sep 2010 03:39:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>C++继承和python继承不同点</title>
		<link>http://www.ksarea.com/articles/20090827_c-python-class-difference.html</link>
		<comments>http://www.ksarea.com/articles/20090827_c-python-class-difference.html#comments</comments>
		<pubDate>Thu, 27 Aug 2009 12:11:51 +0000</pubDate>
		<dc:creator>king</dc:creator>
				<category><![CDATA[C&C++]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.ksarea.com/articles/20090827_c-python-class-difference.html</guid>
		<description><![CDATA[class A
{
public:
    void f1()
    {
        cout ]]></description>
			<content:encoded><![CDATA[<p><code>class A<br />
{<br />
public:<br />
    void f1()<br />
    {<br />
        cout << "A.f1()" << endl;<br />
    }</p>
<p>    void f()<br />
    {<br />
        f1();<br />
        //f3();<br />
    }<br />
};<br />
<span id="more-250"></span><br />
class B:public A<br />
{<br />
    void f1()<br />
    {<br />
        cout << "B.f1()" << endl;<br />
    }<br />
    void f3()<br />
    {<br />
        cout << "B.f3()" << endl;<br />
    }<br />
};</p>
<p>B b;<br />
b.f();</code><br />
输出为A.f1()，也就是说执行的是基类中的f1()函数。如果python中实现相同的代码如下：<br />
<code>class A:<br />
    def f1(self):<br />
        print "A.f1";<br />
    def f(self):<br />
        self.f1();<br />
        #self.f3();</p>
<p>class B(A):<br />
    def f1(self):<br />
        print "B.f1";<br />
        #A.f1(self);<br />
    def f3(self):<br />
        print "B.f3";<br />
b = B();<br />
b.f();</code><br />
运行输出却为B.f1</p>
<p>总结如下：<br />
在C++中，public继承表明A是B的一部分，在调用f()时，先在B类中找这个函数，没有找到，到A类中找这个函数，找到调用A类中的这个函数，此时传入的this指针被转化为了A类对象的指针，这个时候的调用，找寻函数都只会在A类的范围中，不会跳出A类。所以调用f1这个函数的时候是调用A类中的f1。<br />
在python中，父类和子类不是C++中父类和子类的关系。可以将B类理解成是一个全新的类，只是说，这个类会包含A类的成员。而A类和B类都有f1这个函数，这个时候B类中定义的f1函数会将A类中定义的f1函数给覆盖掉。所以在调用f()函数时，f函数内部实际上调用的还是B类中重新定义的f1函数。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ksarea.com/articles/20090827_c-python-class-difference.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
