我在回答問題Python progression path - From apprentice to guru時看到了這條指令。爲什麼聲稱一個python類可以更好地實現爲一個字典加上一些函數?
9.每當他們向你展示一個Python類時,惹惱你的隔間。聲稱它可以「更好地」作爲字典加上一些功能來實現。擁抱函數式編程。
但我不明白這一點。這對函數式編程有什麼作用?
我在回答問題Python progression path - From apprentice to guru時看到了這條指令。爲什麼聲稱一個python類可以更好地實現爲一個字典加上一些函數?
9.每當他們向你展示一個Python類時,惹惱你的隔間。聲稱它可以「更好地」作爲字典加上一些功能來實現。擁抱函數式編程。
但我不明白這一點。這對函數式編程有什麼作用?
這是在「Python進程路徑」中的原因是它反映了一種認識,即Python類只是函數和字典的語法糖,並且通過直接使用函數和字典,需要更少的語言元素,從而使自己的節目更加「純粹」。
當然這是完全錯誤的,這就是爲什麼它很有趣。或者,也許我還沒有達到啓蒙呢?
這意味着:
class A:
def __init__(this):
this.count = 0
def bump(this):
this.count += 1
a = A()
a.bump()
可以通過東西線沿線的更換:
def constructA():
return {'count':0}
def bumpA(anA):
anA['count'] += 1
a = constructA()
bumpA(a)
或者,更實用的風格,通過返回一個副本避免副作用:
def bumpedA(anA):
newA = {'count': (anA['count'] + 1)}
return newA
a = constructA()
a = bumpedA(a)
這是基本模式 - 您可以通過將方法放入字典本身來獲得多態性(javascr ipt-style),並且通常使用字典和函數來重建整個Python對象系統。
這有什麼好處嗎? – RustyFluff
@RustyFluff:難題,因爲這是一個品味問題(至少在某種程度上)。在Python中,一般來說 - 不,除非你有一個非常具體的理由這樣做。也許是一個JavaScript程序的快速和骯髒的翻譯。 Python之外 - 也許檢查Clojure的多態性,看看你喜歡它。優點是不變性,儘管這又是一個味道問題。 –
其中大部分建議都非常貼切。原則上,每個類都可以作爲一組函數來實現,總是傳遞一個字典作爲第一個參數。 (當然,你會失去動態多態性。) –
@SvenMarnach:你可以擁有你的多態,只需將函數放在字典中即可。然後,只需調用'aDict ['aMethodName'](aDict,...)'並且砰的一聲,就會產生多態性。 –
你需要先閱讀真實世界的哈斯克爾,然後才能進入9級;) – hugomg