亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 8938 | 回復(fù): 10
打印 上一主題 下一主題

Python多態(tài)和C++多態(tài),哪個(gè)更有利? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-06-01 17:27 |只看該作者 |倒序?yàn)g覽
看到這樣一段代碼:

class aa:
    def __init__(self):
        pass
    def get(self):
        d=5
        return d
class bb(aa):
    def __init__(self):
        aa.__init__(self)
    def get(self):
        d=3
        return d
class dd(aa):
    def __init__(self):
        aa.__init__(self)
    def get(self):
        d=4
        return d


def getNum(cc):
    print cc.get()

first=aa()
second=bb()
third=dd()

getNum(first)
getNum(second)
getNum(third)


輸出
5
3
4


被稱著是Python的多態(tài),它和C++的多態(tài)有點(diǎn)不一樣。

在C++中實(shí)現(xiàn)多態(tài)的要點(diǎn)是:
基類中定義虛函數(shù),派生類中重載虛函數(shù)。然后用基類指針指向派生類的對(duì)象,調(diào)用派生類中重載后的函數(shù)。

到底利弊如何,想聽聽大家的意見?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-06-01 23:33 |只看該作者
這問(wèn)題老大了
python和java一樣,都是子類可以覆蓋父類的方法
以子類為父類之定制的角度看,python和java的做法更正確些
因?yàn)槎ㄖ瓢ㄐ薷囊延械暮烷_發(fā)沒(méi)有的

C++里,貌似父類的一些方法,子類是沒(méi)辦法在保持類型隱藏的情況下覆蓋的
這種情況下子類只能擴(kuò)展不能修改父類的功能
這種多態(tài)限制太大,俺認(rèn)為不夠廣泛
~~~~~~~~~~~~~~~~
個(gè)人見解  全不充數(shù)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-06-02 08:01 |只看該作者
不好講,別太過(guò)多關(guān)注語(yǔ)法的東西。
各自都有特色的部分,談不上利弊。如果都一樣的話,沒(méi)必要存在這么多語(yǔ)言了

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-06-02 12:30 |只看該作者
樓上2位說(shuō)得有理,我個(gè)人覺(jué)得Python在多態(tài)方面更好操作一點(diǎn)。原因在于Python是動(dòng)態(tài)類型的語(yǔ)言,而C++是靜態(tài)類型。

例如C++中

class A
{
    virtual void dosomething()=0;
}

class B:public A
{
    void dosomething(){};
}


在程序中

A* aPtr;
aPtr=new B();
aPtr->dosomething();


就調(diào)用了B中的dosomething()函數(shù)。

但是在Python中,動(dòng)態(tài)類型就可以了,不需要用基類類型的指針。如

class A:
    def __init__(self):
        pass
    def get(self):
        d=5
        return d
class B(A):
    def __init__(self):
        A.__init__(self)
    def get(self):
        d=3
        return d
class C(A):
    def __init__(self):
        A.__init__(self)
    def get(self):
        d=4
        return d


在程序中

a=A() # 相當(dāng)于C++中的基類指針
b=B()
c=C()

# 可以這樣實(shí)現(xiàn)多態(tài)
a=b # a指向派生對(duì)象b
a.get() #調(diào)用B的函數(shù)

a=c # a指向派生對(duì)象c
a.get() # 調(diào)用C的函數(shù)


可以看出動(dòng)態(tài)類型語(yǔ)言Python實(shí)現(xiàn)多態(tài)更方便。

[ 本帖最后由 refeihc 于 2009-6-2 12:34 編輯 ]

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-06-02 14:22 |只看該作者

回復(fù) #4 refeihc 的帖子

還是要根據(jù)具體項(xiàng)目來(lái)選擇語(yǔ)言,動(dòng)態(tài)語(yǔ)言看起來(lái)卻是方便快捷

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-06-03 13:47 |只看該作者
從我對(duì)多態(tài)的理解來(lái)看,python的不能叫做多態(tài)。本身就是另外一個(gè)對(duì)象嗎

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-06-03 17:10 |只看該作者

回復(fù) #6 fufeiwxy 的帖子

同意

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-06-11 11:34 |只看該作者
沒(méi)看出如此“多態(tài)”有什么意義,明明就是另外一個(gè)對(duì)象。

這樣的繼承,能調(diào)用父類的方法么?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-06-11 11:42 |只看該作者
寫了個(gè)例子:

class Father :
    def __init__(self):
        pass

    def drink(self):
        print 'drink bear...';

    def eat(self):
        print 'eat bread...';

class Son(Father):
    def __init__(self):
        Father.__init__(self);

    def drink(self):
        print 'drink milk...'


if __name__ == "__main__":
    father = Father();
    father.drink();
    father.eat();

    son = Son();
    son.drink();
    son.eat();



輸出結(jié)果:

  1. drink bear...
  2. eat bread...
  3. drink milk...
  4. eat bread...
復(fù)制代碼



不知道為什么,F(xiàn)ather 不寫 __init__方法,實(shí)例化子類的時(shí)候會(huì)報(bào)錯(cuò)。

[ 本帖最后由 child_bbs 于 2009-6-11 11:43 編輯 ]

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-06-11 11:47 |只看該作者
重新寫了一個(gè)不顯示調(diào)用__init__的:

class Father :
    def drink(self):
        print 'drink bear...';

    def eat(self):
        print 'eat bread...';

class Son(Father):
    def drink(self):
        print 'drink milk...'


if __name__ == "__main__":
    father = Father();
    father.drink();
    father.eat();

    son = Son();
    son.drink();
    son.eat();



看來(lái)雖然 Python 會(huì)給class默認(rèn) __init__ 方法,但是顯示調(diào)用的時(shí)候還是必須手寫才行啊。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP