為什么Python類(lèi)語(yǔ)法應(yīng)該不同?
如果您已經(jīng)使用了任何編程語(yǔ)言很長(zhǎng)一段時(shí)間,您就會(huì)發(fā)現(xiàn)您想要的東西跟它原有的是不同的。Python對(duì)我來(lái)說(shuō)是真的是這樣。如果可以的話(huà),對(duì)于Python中很多的我想要改的東西,我有很多的想法?,F(xiàn)在我向您講述其中一個(gè):類(lèi)定義的語(yǔ)法。
但是,讓我們先從定義函數(shù)的語(yǔ)法開(kāi)始。它有一個(gè)非常好的特性:函數(shù)定義看起來(lái)像它們相應(yīng)的函數(shù)調(diào)用。函數(shù)定義如下:
def func_name(arg1, arg2):
當(dāng)您調(diào)用該函數(shù)時(shí),您使用類(lèi)似的語(yǔ)法:函數(shù)名稱(chēng)和括號(hào)中以逗號(hào)分隔的參數(shù)列表:
x = func_name(12, 34)
只需調(diào)整調(diào)用中的標(biāo)點(diǎn)符號(hào),使其與函數(shù)定義中的位置一致,就可以看到arg1為12,而arg2為34.很好。
好了,現(xiàn)在讓我們來(lái)看一下如何定義一個(gè)帶有基類(lèi)的類(lèi):
class MyClass(BaseClass, AnotherBase):
要?jiǎng)?chuàng)建此類(lèi)的實(shí)例,請(qǐng)使用類(lèi)的名稱(chēng)和括號(hào),但現(xiàn)在并行性已經(jīng)消失。您并沒(méi)有傳遞BaseClass來(lái)構(gòu)造MyClass:
my_obj = MyClass(...)
如果只是看一下這個(gè)類(lèi),您并不知道要向括號(hào)中傳入什么來(lái)構(gòu)造一個(gè)MyClass對(duì)象。因此“def”和“class”具有非常相似的語(yǔ)法,而且函數(shù)調(diào)用和對(duì)象創(chuàng)建具有非常相似的語(yǔ)法,但在創(chuàng)建對(duì)象時(shí),模仿函數(shù)調(diào)用中能引導(dǎo)您得到正確結(jié)果的寫(xiě)法,則完全行不通。
這是專(zhuān)家很容易一眼就帶過(guò)的事情。它們習(xí)慣于使用神秘的語(yǔ)法,類(lèi)似的東西在稍不同的語(yǔ)境中具有不同的含義。而且很多東西在編程語(yǔ)言中是不可避免的:有很多符號(hào),還有更多的概念。必然會(huì)有重疊。
但是我們可以做得更好。為什么使用看起來(lái)像函數(shù)調(diào)用的括號(hào)來(lái)表示基類(lèi)?這里有一個(gè)更好的語(yǔ)法:
class MyClass from BaseClass, AnotherBase:
這不僅避免了誤導(dǎo)性的標(biāo)點(diǎn)符號(hào)并行,甚至還借用了我們用來(lái)討論類(lèi)的英語(yǔ):MyClass派生自BaseClass和AnotherBase。而且“from”已經(jīng)是Python中的關(guān)鍵字。
順便說(shuō)一下,即使是專(zhuān)家也會(huì)偶爾會(huì)犯錯(cuò)誤,將想用”class“的地方寫(xiě)成了”def“,類(lèi)似的語(yǔ)法意味著代碼是有效的?;厮葜安粫?huì)發(fā)現(xiàn)錯(cuò)誤,這可能令人困惑。
我并不是要嚴(yán)肅地提議改變Python。不是因?yàn)檫@不會(huì)更好(或者這會(huì)更好),而是因?yàn)檫@樣的改變?cè)谕砥谑遣磺袑?shí)際的。我想它可以添加成一種替代語(yǔ)法,但是很難確定,對(duì)于初學(xué)者來(lái)說(shuō),為類(lèi)提供兩種語(yǔ)法會(huì)更好。
但我認(rèn)為,嘗試像困惑的初學(xué)者一樣來(lái)看我們熟悉的情景,這很有益處。替代語(yǔ)法僅有助于向他們解釋它,并可能幫助我們?cè)谖磥?lái)做出更好的選擇。
好啦!今天的分享到這里結(jié)束了,希望大家持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會(huì)有大量?jī)?yōu)質(zhì)內(nèi)容與大家分享!版權(quán)聲明:轉(zhuǎn)載文章來(lái)自公開(kāi)網(wǎng)絡(luò),版權(quán)歸作者本人所有,推送文章除非無(wú)法確認(rèn),我們都會(huì)注明作者和來(lái)源。如果出處有誤或侵犯到原作者權(quán)益,請(qǐng)與我們聯(lián)系刪除或授權(quán)事宜。