在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ Python 為什么不把 self 設(shè)置成一個(gè)關(guān)鍵字?

Python 為什么不把 self 設(shè)置成一個(gè)關(guān)鍵字?

各位好,我最近在 Coursera 上學(xué) Python 3,當(dāng)老師講到 Python OO 這部分,感覺(jué)這個(gè) self 特別奇怪,不將其設(shè)置成關(guān)鍵字的好處是什么呢?在類(lèi)里面定義一個(gè)與實(shí)例有關(guān)的函數(shù)就必須多寫(xiě)一個(gè) self 作為第一參數(shù)傳入,我作為新手,感覺(jué)這看起來(lái)有點(diǎn)多余的動(dòng)作跟 Python 簡(jiǎn)潔的理念有點(diǎn)相左。與之相對(duì)的是,PHP 的 $this、JS 和 Java 的 this,因?yàn)槭顷P(guān)鍵字,用起來(lái)很清晰,但 Python 的 self 只不過(guò)是約定俗成,用其他命名不會(huì)導(dǎo)致程序錯(cuò)誤,但其他人看起來(lái)就不方便了。

萌新求解答,謝謝。

回答
編輯回答
風(fēng)清揚(yáng)

1.首選zen of python(import this即可看到Explicit is better than implicit.)中提到顯式勝于隱式,所以參數(shù)中必須有個(gè)首參數(shù)self或其他的名字,而不是像c++這種高級(jí)語(yǔ)言有隱式的作用域
2.為什么self不是關(guān)鍵字,原因很簡(jiǎn)單Python是動(dòng)態(tài)語(yǔ)言,比如你總是可以對(duì)普通的函數(shù)動(dòng)態(tài)綁定為方法,所以不可能限定self關(guān)鍵字:

import types
class A:
    def __init__(self):
        self.bar = 'bar'

def foo(bar):
    print(bar.bar)

a = A()
a.foo = types.MethodType(foo, a)
a.foo()

3. 還想到一個(gè)題外話(huà),有一個(gè)玩笑是“基于Python的 web framework比python的關(guān)鍵字還多”,于是有人和作者提議多加一些關(guān)鍵字,但是被拒絕了,這也印證了Zen of Python的另外兩句話(huà):Simple is better than complex.Complex is better than complicated.

2017年6月27日 22:52
編輯回答
墨染殤

其實(shí)是可以這樣寫(xiě)的

class A:
    def __init__(this, x):
        this.x = x
2017年4月2日 18:07
編輯回答
萌吟

可以看下這篇回答以及官方的faq

個(gè)人喜好居多,大概來(lái)說(shuō),作者所認(rèn)為的簡(jiǎn)潔和你認(rèn)為的不一樣。

2018年2月24日 20:04