精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

Python類定義有哪些作用

本篇內容介紹了“Python類定義有哪些作用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

十載的湖濱網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整湖濱建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯公司從事“湖濱網站設計”,“湖濱網站推廣”以來,每個客戶項目都認真落實執行。

The Class Scope

Ruby class 的作用域有以下幾個作用:

  • 定義方法。在其實例(或其子類的實例)查找方法時提供方法定義

  • 存放常量的容器。可以通過 ClassName::CONST 的語法訪問常量

  • 作為一個普通的作用域,其中也可以存放局部變量什么的。但無法被外界直接訪問到。

從這些功用來看, Ruby 與 Python 的 class scope 似乎沒什么區別。 只是 Python 對于常量不做特別對待而已。 但是, 下面的這些差異才是重點:

Before -vs- After

當你可以在 Ruby 的 class scope 里寫代碼時, 這個 class 自身就已經被實例化了。 你可以在定義 class 的過程中調用這個 class 的方法。 或者用 Smalltalk 的方式來說:向 class 發送消息。 所以我們才能看到 Sinatra、Rails Model 這些簡單優雅的 DSL。

相比之下, Python 的 class scope 存在于 class 被實例化之前, 定義結束時, scope 這個字典連同聲明超類的 tuple 一起傳入給 metaclass 用以完成類的構建。

Python 要想做到 attr_accessor :foo, :bar 這么簡單的事情, 充其量只能在 model 層面引入特殊的 property descriptor constructor, 而且為了填充作用域還不得不 repeat yourself。 自省 call stack 修改作用域這種糟糕的方案我還是不太敢用。 每次顯式地把 locals() 傳出去打字又太多。 所以有生之年真的不要指望 Python 以 OO 為基礎設計出優雅且實用的 internal DSL 了。

Reopening Class

Ruby class 的又一個巨大優勢: 可以隨時再度打開并加以修改。 因此你可以為舊有的 class 增減方法, 可以為其補充 mixin。 這里有個小小的 caveat 是: Class scope 里定義的局部變量在每次 reopen 時是獨立的, 無法互訪。

這里 Python 就只能悲劇了: 多繼承關系與初始 class scope 是由 metaclass 一次性定義完成的, 沒有正當的修改機會。 刪除舊有的方法定義倒是簡單:del cls.method 即可。 添加方法就很費勁: 沒有 code block 語法, lambda 表達式不能寫多條語句, 別忘了還得留第一個參數的位置作為 self

因此大體上可以斷言: Python 的 class 在定義之后基本上是靜態的。 不方便也不推薦用黑魔法修改其定義。

Decorator -vs- Redefining Method

Decorator 是 Python 語法中強大的存在, 很多現代的 library 都充分地使用它。 在類定義中也時常可見。 比如內置的 property()

然而, 在定義類的時候, decorator 的作用非常之小, 并沒有比 property descriptor constructor 強多少。 畢竟 decorator 只是為 function composition 而非 OOP 設計的。

內置的 decorator 里, 無法取代但又非常惱人的當屬 staticmethod /classmethod。 定義出來的方法同時會出現在實例和類的屬性查找路線上。

Ruby 沒有 decorator, 但可以利用前面提到的 class scope 持久化的特點, 把舊的方法定義取出來, 加以包裝后再重新定義。 參見 Rails Controller 中 filter的聲明方式。

另外, 事實上有人已經在 Ruby 中實現了縮水版的 decorator。 不過似乎也沒有得到廣泛應用就是了。

Class of Class

Python 里有專門的 metaclass 用來表達“實例化后可以產出 class 的 class”。 Ruby 則沒有這種特別的概念。 但實際使用起來, Python 的 metaclass 更像是 decorator: 預處理一下超類 tuple 和 class scope 里的內容, 最終把處理后的東西傳給 type() 而已。

還有一個值得注意的問題是, Metaclass 構建生成的 class, 其屬性查找的過程可能會較為迷茫。

相比之下, 這種語言能力在 Ruby 里也存在但很少用得到。 Metaclass 的實用場景多半在于“按照庫 / 框架的要求定義模板式的 class”。 這種需求用inherited / included hook 加上前面提到的 reopening class 的能力就可以輕易地做到了。 不多談。

“Python類定義有哪些作用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!


網頁題目:Python類定義有哪些作用
網站URL:http://m.jcarcd.cn/article/jhhehi.html
主站蜘蛛池模板: 日韩亚洲制服另类 | 日韩专区+ | 制片厂传媒在线 | 国产精品第72页 | 97超级碰碰碰电影 | 国自产偷 | 日本国产在线 | 成人影院在线入口 | 欧美亚洲综合视频 | 精品国产品 | 国产女女| 日韩午夜理 | 国产精品1234| 日本激情在线网 | 殴美在线观看乱操 | 91免费伊人 | 91社影院在线观看 | 精心挑选 | 欧美性爱欧美日韩 | 日韩精品影视 | 97视频免费看 | 精品国产乱码 | 午夜一区一品日本 | 日韩国产亚 | 国产嫖妓正在播放 | 国产一区二区动漫 | 国产做爰又粗又 | 日韩视频中文字暮 | 国产高清在线精 | 日本一区二区电影 | 午夜成人试看体验区 | 91偶偶福利 | 七七影院 | 国产又大又 | 91青青草探花视频 | 日本三区四区免 | 九九热在线免费观看 | 日韩欧美色射高 | 精品电影在线观看 | 99热r| 精品福利片在线观看 |