本文目錄一覽:
python是面向什麼的高級語言?
面相對象、解釋型。
Python支持多種編程范型,包括函數式、指令式、反射式、結構化和面向對象編程。它擁有動態類型系統和垃圾回收功能,能夠自動管理內存使用,並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及面向對象的方法旨在幫助程序員為小型的和大型的項目編寫清晰的、合乎邏輯的代碼。
吉多·范羅蘇姆於1980年代後期開始研發Python,它是作為ABC語言的後繼者,也可以視之為使用叫做的M-表達式的一種傳統中綴表示法的LISP方言。
吉多·范羅蘇姆於1991年首次發布 Python 0.9.0。Python2.0於2000 年發布並引入了新功能。Python3.0於2008年發布,是該語言的主要修訂版,並非完全向後兼容。 Python2於2020年隨2.7.18版停止使用。
Python的設計哲學強調代碼的可讀性和簡潔的語法,尤其是使用空格縮進劃分代碼塊。相比於C或Java,Python讓開發者能夠用更少的代碼表達想法。
Python解釋器本身幾乎可以在所有的操作系統中運行。Python的官方解釋器CPython是用C語言編寫的,它是一個由社群驅動的自由軟件,目前由Python軟件基金會管理。
特徵
Python是多范型編程語言。它完全支持結構化編程和面向對象編程,還有很多特徵支持函數式編程和元編程比如元對象協議(元類和魔術方法)。
通過擴展還可以支持很多范型,包括面向切面編程、契約式設計和邏輯編程。
Python使用動態類型,在內存管理上採用引用計數和環檢測相結合的垃圾收集器。它的特徵還有動態名字解析(後期綁定),即在程序執行期間綁定方法和變量的名字。
Python對遵循LISP傳統的函數式編程提供了有限的支持,它提供了 map、filter和reduce函數;列表推導式、字典、集合和生成器表達式。
python元編程中一些處理屬性的特殊方法
在用戶自己定義的類中,下述特殊方法用於獲取、設置、刪除和列出屬性
使用點號,或者內置的的getattr,hasattr, setattr函數存取屬性都會觸發下述列表中的特殊方法。但是,直接通過實例的 __dict__ 屬性來存取方法不會觸發這些特殊方法。所以,如果需要,在一些情況下,可以使用這種方法跳過特殊方法。
示例,假設有個名為 Class 的類,obj 是 Class 類的實例,attr 是 obj 的屬性。
obj.attr 和 getattr(obj, ‘attr’, 42)都會觸發 Class.__getattribute__(obj, ‘attr’) 方法。嘗試獲取指定屬性時總會調用這個方法,不過,尋找的屬性時特殊屬性或者特殊方法時除外。
del obj.attr 語句會觸發 Class.__delattr__(obj, ‘attr’) 方法。
dir(obj)語句會觸發 Class.__dir__(obj) 方法。
僅當獲取指定的屬性失敗,搜索過 obj、Class 和超類之後調用 Class.__getattr__(self, name)
嘗試設置指定的屬性時總會調用 Class.__setattr__(obj, ‘attr’, value) ,點號和setattr(obj, ‘attr’, 42)會調用這個方法。
為什麼python的元編程能力沒有ruby強
Ruby的確是比Python更乾淨的OOP,這也不奇怪,Ruby根本就是Smalltalk換了點語法而已。
但這個更乾淨並不是a.length vs. len(a),名詞在前還是動詞在前的問題,否則OOP也未免太膚淺了。
在Python里,對於a.f()可能是調用a所屬的類的方法f,也可能是調用a的屬性f。這個二義性在metaprogramming時帶來很多不一致和麻煩,比如Python對__xxx__ magic method lookup的特殊規定。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/249286.html