欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

一文完全掌握Python property屬性以及實戰中應用

系統 1608 0

初識property屬性

說道屬性,我們馬上想到實例屬性、類屬性等
那么回顧一下類屬性

            
              clsas Provice
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
	country 
              
                =
              
              
                'china'
              
              
                def
              
              
                xxx
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                pass
              
            
          

如上代碼中 country就是類屬性,我們可以通過以下方式去設置值和獲取值

            
              beijing 
              
                =
              
               Probice
              
                (
              
              
                )
              
              
                # 調用實力方法
              
              
beijing
              
                .
              
              xxx
              
                (
              
              
                )
              
              
                # 獲取類屬性
              
              
my_country 
              
                =
              
               beijing
              
                .
              
              country

            
          

那么如果我們這個需要在這個country的值需要一些邏輯運算才能得到怎么辦?

python為我們提供了property屬性可以很方便的解決這個問題 如下:

            
              clsas Provice
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                # 定義property屬性
              
              
	@
              
                property
              
              
                def
              
              
                country
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
              
                'china'
              
              
                def
              
              
                xxx
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                pass
              
            
          

調用:

            
              beijing 
              
                =
              
               Probice
              
                (
              
              
                )
              
              
                # 調用方法
              
              
beijing
              
                .
              
              xxx
              
                (
              
              
                )
              
              
                # 調用property屬性
              
              
my_country 
              
                =
              
               beijing 
              
                .
              
              country

            
          

由上面的代碼,我們很清楚明白了, 什么是property屬性?

一種用起來像是使用的實例屬性一樣的特殊屬性,可以對應于某個方法

property屬性的定義和調用注意點

  • 在實例方法的基礎上添加 @property 裝飾器;并且 僅有一個self參數
  • 調用時, 無需括號

實例

分頁操作:
功能包括:

  • 根據用戶請求的當前頁和數據條數計算分頁 的start_index和end_index:
  • 根據start_index和end_index去數據庫中請求數據
            
              
                class
              
              
                Pager
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               current_page
              
                )
              
              
                :
              
              
                # 用戶當前請求的頁碼(第一頁、第二頁...)
              
              
        self
              
                .
              
              current_page 
              
                =
              
               current_page
        
              
                # 每頁默認顯示10條數據
              
              
        self
              
                .
              
              per_items 
              
                =
              
              
                10
              
               

    @
              
                property
              
              
                def
              
              
                start_index
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        val 
              
                =
              
              
                (
              
              self
              
                .
              
              current_page 
              
                -
              
              
                1
              
              
                )
              
              
                *
              
               self
              
                .
              
              per_items
        
              
                return
              
               val

    @
              
                property
              
              
                def
              
              
                end_index
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        val 
              
                =
              
               self
              
                .
              
              current_page 
              
                *
              
               self
              
                .
              
              per_items
        
              
                return
              
               val


              
                # ############### 調用 ###############
              
              
p 
              
                =
              
               Pager
              
                (
              
              
                1
              
              
                )
              
              
p
              
                .
              
              start_index  
              
                # 就是起始值,即:m
              
              
p
              
                .
              
              end_index  
              
                # 就是結束值,即:n
              
            
          

由此,我們得出結論:

Python的property屬性的功能是:property屬性內部進行一系列的邏輯計算,最終將計算結果返回。

property屬性的倆種應用方式

  • 裝飾器方式 : 在方法上加裝飾器
  • 類屬性 在類中定義值為property對象的類屬性
裝飾器方式

在類的實例方法上應用@property裝飾器

Python中的類有經典類和新式類,新式類的屬性比經典類的屬性豐富。( 如果類繼object,那么該類是新式類 )

經典類,具有一種@property裝飾器:

            
              clsas Provice
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                # 定義property屬性
              
              
	@
              
                property
              
              
                def
              
              
                country
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
              
                'china'
              
            
          

新式類,具有三種@property裝飾器:

            
              clsas Provice
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                ''' python3中默認繼承object類 以python2、3執行此程序的結果不同,因為只有在python3中才有@xxx.setter @xxx.deleter '''
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
		self
              
                .
              
              country 
              
                =
              
              
                'china'
              
              
		
	@
              
                property
              
              
                def
              
              
                country
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              country
              
                .
              
              upper
              
                (
              
              
                )
              
              
	
	@country
              
                .
              
              setter
	
              
                def
              
              
                country
              
              
                (
              
              self
              
                ,
              
              value
              
                )
              
              
                :
              
              
                # 必須倆個參數
              
              
		self
              
                .
              
              country 
              
                =
              
               value
	
	@country
              
                .
              
              deleter
	
              
                def
              
              
                country
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                del
              
               self
              
                .
              
              country

            
          

調用方式

            
              beijing 
              
                =
              
               Provice
              
                (
              
              
                )
              
              
beijing
              
                .
              
              country 			
              
                # 自動執行 @property 修飾的 country方法,并獲取方法的返回值'
              
              
beijing
              
                ,
              
              country 
              
                =
              
              
                'china'
              
              
                # 自動執行 @country.setter 修飾的 country方法,并將 china 賦值給方法的參數
              
              
                del
              
               beijing
              
                .
              
              country 		
              
                # 自動執行 @country.deleter 修飾的 country方法
              
            
          
類屬性方式

當使用類屬性的方式創建property屬性時,經典類和新式類無區別

            
              clsas Provice
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                ''' python3中默認繼承object類 以python2、3執行此程序的結果不同,因為只有在python3中才有@xxx.setter @xxx.deleter '''
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
		self
              
                .
              
              country 
              
                =
              
              
                'china'
              
              
                def
              
              
                get_country
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              country
              
                .
              
              upper
              
                (
              
              
                )
              
              
                def
              
              
                set_country
              
              
                (
              
              self
              
                ,
              
              value
              
                )
              
              
                :
              
              
                # 必須倆個參數
              
              
		self
              
                .
              
              country 
              
                =
              
               value
	
	
              
                def
              
              
                del_country
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                del
              
               self
              
                .
              
              country
		
	country 
              
                =
              
              
                property
              
              
                (
              
              get_country
              
                ,
              
              set_country
              
                ,
              
              del_country
              
                ,
              
              
                'descroption...'
              
              
                )
              
              
                # 調用
              
              
beijing 
              
                =
              
               Provice
              
                (
              
              
                )
              
              
beijing
              
                .
              
              country     				 
              
                # 獲取 - 自動調用第一個參數中定義的方法:get_country
              
              
beijing
              
                .
              
              country
              
                =
              
              
                "china"
              
              
                # 修改 - 自動調用第二個參數中定義的方法:set_country方法,并將'china'當作參數傳入
              
              
desc
              
                =
              
               beijing
              
                .
              
              country
              
                .
              
              __doc__        
              
                # 自動獲取第四個參數中設置的值:description...
              
              
                print
              
              
                (
              
              desc
              
                )
              
              
                del
              
               beijing
              
                .
              
              country 				 
              
                # 刪除 - 自動調用第三個參數中定義的方法:del_country方法
              
            
          

property方法中四個參數詳解 :

  1. 第一個參數是方法名,調用 對象.屬性 時自動觸發執行方法
  2. 第二個參數是方法名,調用 對象.屬性 = XXX 時自動觸發執行方法
  3. 第三個參數是方法名,調用 del 對象.屬性 時自動觸發執行方法
  4. 第四個參數是字符串,調用 對象.屬性__doc__ ,此參數是該屬性的描述信息

總結

  • 定義property屬性共有兩種方式,分別是【裝飾器】和【類屬性】,而【裝飾器】方式針對經典類和新式類又有所不同。
  • 通過使用property屬性,能夠簡化調用者在獲取數據的流程

應用

如果我們學過java 就知道私有屬性 set() 和 get() 方法。 如下java代碼:

            
              
                class
              
              
                Student
              
              
                {
              
              
                // 聲明私有屬性name
              
              
                private
              
               String name
              
                ;
              
              
                /** name 的set方法,對name值做非空判斷 */
              
              
                public
              
              
                void
              
              
                setName
              
              
                (
              
              String name
              
                )
              
              
                {
              
              
                if
              
              
                (
              
              null
              
                !=
              
              name 
              
                &&
              
               name
              
                .
              
              length 
              
                >
              
              
                0
              
              
                )
              
              
                {
              
              
                this
              
              
                .
              
              name 
              
                =
              
               name
              
                ;
              
              
                }
              
              
                else
              
              
                {
              
              
                print
              
              
                (
              
              
                "name值不能為空"
              
              
                )
              
              
                }
              
              
                }
              
              
                public
              
              
                void
              
              
                getName
              
              
                (
              
              
                )
              
              
                {
              
              
                return
              
              
                this
              
              
                .
              
              name
              
                ;
              
              
                }
              
              
                }
              
              
                // 調用
              
              
Student s1 
              
                =
              
              
                new
              
              
                Srudent
              
              
                (
              
              
                )
              
              
                ;
              
              
                // 創建實例對象
              
              
s1
              
                .
              
              
                setName
              
              
                (
              
              
                '張三'
              
              
                )
              
              
                ;
              
              
                // 設置name
              
              
name 
              
                =
              
               s1
              
                .
              
              
                getName
              
              
                (
              
              
                )
              
              
                // 獲取name
              
            
          

那么我們也仿照上面java實現的方式來實現一個python的setter和getter方法

            
              
                class
              
              
                Student
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 創建私有屬性__name
              
              
		self
              
                .
              
              __name 
              
                =
              
              
                ''
              
              
                def
              
              
                getName
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              __name
		
	
              
                def
              
              
                setName
              
              
                (
              
              self
              
                ,
              
              name
              
                )
              
              
                :
              
              
                if
              
              
                None
              
              
                !=
              
              name 
              
                and
              
              
                len
              
              
                (
              
              name
              
                )
              
              
                >
              
              
                0
              
              
                :
              
              
			self
              
                .
              
              __name 
              
                =
              
               name
		
              
                else
              
              
                :
              
              
                print
              
              
                (
              
              
                "name值不能為空"
              
              
                )
              
              
                # 調用
              
              
s1 
              
                =
              
               Student
              
                (
              
              
                )
              
              
                //
              
               創建實例
s1
              
                .
              
              setName
              
                (
              
              
                '張三'
              
              
                )
              
              
                //
              
               設置名稱
name 
              
                =
              
               s1
              
                .
              
              getName
              
                (
              
              
                )
              
              
                //
              
               獲取名稱

            
          

python實現后,我們發現通過property 可以作進一步優化

            
              
                class
              
              
                Student
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 創建私有屬性__name
              
              
		self
              
                .
              
              __name 
              
                =
              
              
                ''
              
              
                def
              
              
                getName
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              __name
		
	
              
                def
              
              
                setName
              
              
                (
              
              self
              
                ,
              
              name
              
                )
              
              
                :
              
              
                if
              
              
                None
              
              
                !=
              
              name 
              
                and
              
              
                len
              
              
                (
              
              name
              
                )
              
              
                >
              
              
                0
              
              
                :
              
              
			self
              
                .
              
              __name 
              
                =
              
               name
		
              
                else
              
              
                :
              
              
                print
              
              
                (
              
              
                "name值不能為空"
              
              
                )
              
              
	NAME 
              
                =
              
              
                property
              
              
                (
              
              getName
              
                ,
              
              setName
              
                )
              
              
                # 調用
              
              
s1 
              
                =
              
               Student
              
                (
              
              
                )
              
              
                # 創建實例
              
              
s1
              
                .
              
              NAME 
              
                =
              
              
                '張三'
              
              
                # 設置name
              
              
name 
              
                =
              
               s1
              
                .
              
              NAME       
              
                # 獲取name
              
            
          

用裝飾器實現property的方式

            
              
                class
              
              
                Student
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 創建私有屬性__name
              
              
		self
              
                .
              
              __name 
              
                =
              
              
                ''
              
              
                # 使用裝飾器對name進行裝飾,那么會自動添加一個叫name的屬性,當調用獲取name的值時,調用裝飾的方法
              
              
	@
              
                property
              
              
                def
              
              
                name
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              __name
	
	 
              
                # 使用裝飾器對name進行裝飾,當對name設置值時,調用裝飾的方法 
              
              
	@name
              
                .
              
              setter
	
              
                def
              
              
                name
              
              
                (
              
              self
              
                ,
              
              name
              
                )
              
              
                :
              
              
                if
              
              
                None
              
              
                !=
              
              name 
              
                and
              
              
                len
              
              
                (
              
              name
              
                )
              
              
                >
              
              
                0
              
              
                :
              
              
			self
              
                .
              
              __name 
              
                =
              
               name
		
              
                else
              
              
                :
              
              
                print
              
              
                (
              
              
                "name值不能為空"
              
              
                )
              
              
	NAME 
              
                =
              
              
                property
              
              
                (
              
              getName
              
                ,
              
              setName
              
                )
              
              
                # 調用
              
              
s1 
              
                =
              
               Student
              
                (
              
              
                )
              
              
                # 創建實例
              
              
s1
              
                .
              
              NAME 
              
                =
              
              
                '張三'
              
              
                # 設置name
              
              
name 
              
                =
              
               s1
              
                .
              
              NAME       
              
                # 獲取name
              
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人毛片视频在线观看 | 免费在线观看视频a | 日本在线播放一区 | 一区二区免费在线观看 | 天天噜天天干 | 亚州中文字幕 | 一国产一级淫片a免费播放口 | 亚洲免费三区 | 91插视频 | 美女扣下面流白浆丝袜 | 午夜精品久久久久久99热7777 | 激情一区二区三区成人 | 欧美日韩大尺码免费专区 | av中文字幕在线 | 天天拍天天干 | 国产精品1区 | 一区二区三区四区在线 | 做羞羞视频 | 天天操天天操天天 | 久久久久欧美精品网站 | 激情中文网 | 日韩欧美动作影片 | 亚州久久| 日本高清18xxxx | 国产噜噜噜精品免费 | 色欧美片视频在线观看 | 视频一区在线 | 亚洲精品午夜视频 | 日日摸夜夜添夜夜添破第一 | 在线天堂中文在线资源网 | 国产亚洲精品久久久久久打不开 | 日日干天天爽 | 国产一区二区三区免费 | 亚洲国产香蕉视频欧美 | 嫩草影院在线入口 | 国产精品免费观看 | 亚洲天天干 | 欧美激情一区二区三区视频高清 | 多女多p多杂交视频在线观看 | 久久免费精品视频 | 国产一卡二卡三卡 |