欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python有哪些屬性和特性

這篇文章將為大家詳細(xì)講解有關(guān)Python有哪些屬性和特性,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鞍山企業(yè)網(wǎng)站建設(shè),鞍山品牌網(wǎng)站建設(shè),網(wǎng)站定制,鞍山網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,鞍山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

一、類屬性、實(shí)例屬性、私有屬性與特性

類屬性:類屬性在__init__()外初始化,屬于類所有,所有實(shí)例共享一個(gè)屬性。

調(diào)用方法:類屬性在內(nèi)部用classname.類屬性名調(diào)用,外部既可以用classname.類屬性名又可以用instancename.類屬性名來調(diào)用。

實(shí)例屬性:實(shí)例屬性屬于各個(gè)實(shí)例所有,互不干擾。

私有屬性:

1.單下劃線_開頭:只是告訴別人這是私有屬性,外部依然可以訪問更改。

2.雙下劃線__開頭:外部不可通過instancename.propertyname來訪問或者更改,實(shí)際將其轉(zhuǎn)化為了_classname__propertyname。

特性:是用于管理實(shí)例屬性的類屬性。

特性用途:經(jīng)常用于把公開的屬性變成使用讀值方法和設(shè)值方法管理的屬性,且在不影響客戶端代碼的前提下實(shí)施業(yè)務(wù)規(guī)則。

注意:

不要對(duì)實(shí)例屬性和類屬性使用相同的名字。否則實(shí)例屬性會(huì)遮蓋類屬性,發(fā)生難以發(fā)現(xiàn)的錯(cuò)誤。

實(shí)例屬性不會(huì)遮蓋類特性,但類特性會(huì)遮蓋實(shí)例屬性。

這是因?yàn)閛bj.attr不會(huì)從實(shí)例obj開始尋找attr,而是從obj.__class__開始;而且僅當(dāng)類中沒有名為attr的特性時(shí),Python才會(huì)在實(shí)例中尋找attr。

簡(jiǎn)言之,就遮蓋層級(jí)而言,類特性>實(shí)例屬性>類屬性。

二、使用特性驗(yàn)證屬性

使用特性可以驗(yàn)證實(shí)例屬性的有效性,同時(shí)能夠根據(jù)已知屬性和屬性之間的關(guān)系式調(diào)整其他屬性,避免硬編碼。

案例:假設(shè)某商店經(jīng)營堅(jiān)果、雜糧等多種有機(jī)食物,每位顧客的訂單會(huì)包含店中的一系列商品,我們需要根據(jù)客戶的訂單計(jì)算出總價(jià)。

分析:我們不希望顧客訂單的商品重量為非正數(shù),需要借助@property裝飾器實(shí)現(xiàn)值的獲取與設(shè)置,從而驗(yàn)證實(shí)例屬性的有效性。代碼如下:

class LineItem():
  def __init__(self,description,weight,price):
    self.description=description
    self.weight=weight
    self.price=price
 
  def subtotal(self):
    return self.weight*self.price
 
  @property#讀值。
  def weight(self):
    return self.__weight#真正的值存儲(chǔ)在私有屬性中。
 
  @weight.setter
  def weight(self,value):
    if value >0:
      self.__weight=value#有效值存入私有屬性中。
    else:
      raise ValueError('Value must be > 0')#對(duì)于無效的值拋出ValueError。

Tips:當(dāng)我們需要設(shè)置只讀屬性時(shí),只使用@property,無需使用@func.setter。

原理解析:為了更好地理解@property裝飾器的原理,我們寫一版效果相同但沒使用裝飾器的代碼。

class LineItem:
  def __init__(self, description, weight, price):
    self.description = description
    self.weight = weight
    self.price = price
 
  def subtotal(self):
    return self.weight * self.price
 
  def get_weight(self): #普通讀值方法。
    return self.__weight
 
  def set_weight(self, value): #普通設(shè)值方法。
    if value > 0:
      self.__weight = value
    else:
      raise ValueError('value must be > 0')
  weight = property(get_weight, set_weight) #構(gòu)建property對(duì)象,賦值給公開的類特性。

property 構(gòu)造方法的完整簽名:

property(fget=None, fset=None, fdel=None, doc=None)

三、特性工廠函數(shù)

抽象定義特性的方式有兩種,一是使用特性工廠函數(shù),二是使用描述符類。

下面我們用特性工廠函數(shù)來完成上文中提到的訂單結(jié)算案例:

def quantity(storage_name): 
 
  def qty_getter(instance): # instance指的是要把屬性存儲(chǔ)其中的LineItem實(shí)例。
    return instance.__dict__[storage_name] # 引用閉包中的自由變量storage_name,值直接從instance.__dict__中獲取,以便跳過特性,防止無限遞歸。
 
  def qty_setter(instance, value): 
    if value > 0:
      instance.__dict__[storage_name] = value # 同理存儲(chǔ),跳過特性。
    else:
      raise ValueError('value must be > 0')
 
  return property(qty_getter, qty_setter) # 構(gòu)建自定義特性對(duì)象并返回。
 
class LineItem:
  weight = quantity('weight') # 將自定義特性weight定義為類屬性。
  price = quantity('price') # 同上。
 
  def __init__(self, description, weight, price):
    self.description = description
    self.weight = weight # 此處特性已經(jīng)激活,可驗(yàn)證值的有效性。
    self.price = price
 
  def subtotal(self):
    return self.weight * self.price # 此處利用特性獲取實(shí)例中存儲(chǔ)的值。

四、使用特性刪除屬性

class BlackKnight:
 def __init__(self):
   self.members = ['an arm', 'another arm',
           'a leg', 'another leg']
   self.phrases = ["'Tis but a scratch.",
           "It's just a flesh wound.",
           "I'm invincible!",
           "All right, we'll call it a draw."]
 
 @property
 def member(self):
   print('next member is:')
   return self.members[0]
 
 @member.deleter
 def member(self):
   text = 'BLACK KNIGHT (loses {})\n-- {}'
   print(text.format(self.members.pop(0), self.phrases.pop(0)))

刪除屬性只需在主程序中發(fā)出指令:del obj.attr

關(guān)于Python有哪些屬性和特性就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享題目:Python有哪些屬性和特性
文章出自:http://aaarwkj.com/article24/peeeje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站營銷、企業(yè)網(wǎng)站制作、品牌網(wǎng)站建設(shè)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
国产精品久久久久大屁股精品性色| 麻豆视频在线观看传媒| 欧美一区二区三区va| 日本国产一区二区在线观看 | 久久五月婷婷爱综合亚洲| 夜夜高潮夜夜爽免费观看| 欧美日韩另类中文字幕| 国产精品乱码精品久久久| 日韩一区二区三区高清免费视频成人| 91高清视频在线免费观看| 色桃子av一区二区三区| 日本亚洲中文字幕无吗| 欧美激情片免费在线观看| av在线手机中文字幕| 高潮内射一区二区三区| 黄色亚洲一区二区三区四区| 四季一区二区三区av| 日韩最新视频一区二区三| 欧美一级特黄免费大片| 国内一级片内射视频播放| 少妇午夜福利一区二区| 中文字幕黄色三级视频| 久久久国产精品9999综合| 亚洲欧美国产日韩天堂区| 不卡av免费在线网址| 中文字幕人妻熟女在线| 人人妻人人澡人人爽老妇| 亚洲最色一区二区三区| 亚洲激情自拍偷拍视频| 好吊妞在线新免费视频| 国产亚洲无线码一区二区| 亚洲免费av第一区第二区 | 高清欧美精品一区二区三区| 不卡的av中文字幕在线播放| 国产精品兄妹在线观看91| 久娜娜精品视频在线观看| 日本在线免费观看91| 精品国产一区二区三区四不卡在线 | 亚洲国产精品一区二区av| 在线欧美亚洲观看天堂| 日韩欧美乱码一区二区|