99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記
Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記
2018-08-20
收藏

Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記

類與類方法是面向?qū)ο蟮木幊陶Z言中必不可少的特性,本文總結(jié)了Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記,需要的朋友可以參考下
類和實(shí)例
python是一個面向?qū)ο蟮恼Z言,而面向?qū)ο笞钪匾母拍罹褪穷惡蛯?shí)例, 記得剛學(xué)習(xí)的時候不太理解這些概念,直到老師說了一句”物以類聚”. 沒錯就是類, 歸類
物以類聚
類其實(shí)就是把一些相同特性的事物歸成一類, 比如人    
class Person(object):
  pass

我們定義了人這個類, 但人有一些特性,比如 兩個眼睛,一個嘴巴, 我們把這些添加進(jìn)去
    
class Person(object):
  eyes = 2
  mouth = 1

已經(jīng)把人的一些信息寫進(jìn)去了,但是人還有名字, 比如我mink. 好吧我不能虧待自己我得把這些添加進(jìn)去
class Person(object):
  eyes = 2
  mouth = 1
  name = mink

太完美了,一個人終于完成了. 上帝用了一天我就用了一分鐘(開個玩笑), 我們讀一下信息. 人類他有兩個眼睛,一個嘴巴,還有名字叫mink. - -! 有點(diǎn)不對,mink是我的名字啊~ 怎么人類叫mink呢
mink是人類的名字, 人類的名字是mink顯然是錯誤的, “wo” 應(yīng)該是人類的個體,是個單個例子    
class Person(object):
  eyes = 2
  mouth = 1
   
  def __init__(self, name):
    self.name = name
 
me = Person('mink')

現(xiàn)在我終于有了自己的名字而不是給大家共用, 這個方法叫實(shí)例但是我有一個別人不會的技能, 我不受重力影響.    
class Person(object):
  eyes = 2
  mouth = 1
 
  def __init__(self, name)
    self.name = name
 
  def jineng(self, txt):
    print "%s %s" % (self.name, txt)
 
me = Person('mink')
me.jineng("我不受重力影響, 我會飛")

類方法和靜態(tài)方法
python中可以經(jīng)常看到@classmethod和@staticmethod, 被稱為類方法和實(shí)例方法.
    
class Animal(object):
  name = 'lili'
  age = 1
 
cat = Animal()
print cat.name, cat.age   # print 'lili' 1

創(chuàng)建了一個動物類, 生成了一個cat的實(shí)例, 打印cat的名字和年齡, 可以看出返回的是Animal這個類的屬性, 也就是實(shí)例訪問了類的屬性
    
# 顯示內(nèi)容是一樣的
print cat.name, cat.age
print Animal.name, Animal.age
給Animal類添加一個方法(函數(shù))
 
class Animal(object):
  name = 'lili'
  age = 1
 
  def edit(self, name, age):
    self.name = name
    self.age = age
 
cat = Animal()
cat.edit('rol', 2)
 
print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'lili' 1

也就是說這個默認(rèn)添加的方法是一個實(shí)例的方法, 實(shí)例方法修改了實(shí)例的屬性,而類的屬性不改變
    
# 我們修改一下這個函數(shù)
def edit(self, name, age):
  name = name
  self.age = age
 
cat = Animal()
cat.edit('rol', 2)
 
print cat.name, cat.age     # pirnt 'rol' 2
print Animal.name, cat.age   # print 'lili' 1

說明實(shí)例方法不能修改類的屬性, 但我想修改類的屬性怎么辦
    
# 再一次修改edit
@classmethod
def edit(cls, name, age):
  cls.name = name
  cls.age = age
 
cat = Animal()
cat.edit('rol', 2)
 
print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'rol' 2

這里需要注意的是edit函數(shù)的第一個參數(shù)有self變?yōu)閏ls, python中建議大家在類的方法中使用cls而實(shí)例方法的參數(shù)為self, 而且這里說明了實(shí)例可以使用類的方法(函數(shù))
那么我在給這個類添加init方法來初始化屬性
    
class Animal(object):
  name = 'lili'
  age = 1
 
  def __init__(self, name, age):
    self.name = name
    self.age = age
  ...
 
cat = Animal('kuku', 4)
cat.edit('rol', 2)
 
print cat.name, cat.age     # print 'kuku' 4
print Animal.name, Animal.age  # print 'rol' 2

添加__init__以后, cat不再使用類的屬性,而修改了edit方法也沒有改變cat實(shí)例的屬性.
    
# 添加staticmethod
@staticmethod
def say_name(name=None):
  if not name:
    name = self.name
  print 'my name is %s.' % name
 
cat = Animal('kaka', 3)
cat.say_name()        
# 運(yùn)行的話會報 NameError: global name 'self' is not defined  
# 那是不是沒給他添加self字段, 所以沒找到
def say_name(self, name=None):
  ...
 
cat.say_name()
# TypeError: say_name() takes at least 1 argument(0 given), 顯示缺少參數(shù)

這說明staticmethod 不能使用實(shí)例的屬性和方法, 當(dāng)然也使用不了類. 那么反過來呢
# 我們修改一下代碼
# 先創(chuàng)建一個實(shí)例的方法, 他使用類的staticmethod
 
@staticmethod
def say_name(name):
  print 'my name is %s.' % name
 
def say(self):
  self.say_name(self.name)
   
@classmethod
def _say(cls):
  cls.say_name(cls.name)
 
cat = Animal('kaka', 3)
cat.say()
cat._say()

可以通過類方法和實(shí)例方法訪問staticmethod.
總結(jié)一下:
靜態(tài)方法(staticmethod)

    靜態(tài)方法不能使用實(shí)例的屬性和方法
    靜態(tài)方法不能使用類的屬性和方法
    靜態(tài)方法可以通過類或?qū)嵗{(diào)用
    靜態(tài)方法等于作用域在類中的全局函數(shù)

類方法(classmethod)

    類方法可以使用類的屬性和方法
    類的方法可以使用靜態(tài)方法
    類的方法可以通過類或?qū)嵗{(diào)用

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }