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

熱線電話:13121318867

登錄
首頁精彩閱讀python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析
python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析
2018-05-11
收藏

python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析

這篇文章主要介紹了python中的實例方法、靜態(tài)方法、類方法、類變量和實例變量淺析,需要的朋友可以參考下

注:使用的是Python2.7。

一、實例方法

實例方法就是類的實例能夠使用的方法。如下:

代碼如下:
class Foo:
    def __init__(self, name):
        self.name = name
    def hi(self):
        print self.name

if __name__ == '__main__':
    foo01 = Foo('letian')
    foo01.hi()
    print type(Foo)
    print type(foo01)
    print id(foo01)
    print id(Foo)

運行結(jié)果為:

代碼如下:
letian
<type 'classobj'>
<type 'instance'>
40124704
31323448[code]
可以看到,F(xiàn)oo的type為classobj(類對象,python中定義的類本身也是對象),foo01的type為instance(實例)。而hi()是實例方法,所以foo01.hi()會輸出'letian'。實例方法的第一個參數(shù)默認為self,代指實例。self不是一個關(guān)鍵字,而是約定的寫法。init()是生成實例時默認調(diào)用的實例方法。將Foo的定義改為以下形式:
[code]class Foo:
    def __init__(this, name):
        this.name = name
    def hi(here):
        print here.name

運行依然正確。 內(nèi)置函數(shù)id用來查看對象的標識符,下面是其doc內(nèi)容:

代碼如下:
>>> print id.__doc__
id(object) -> integer

Return the identity of an object.  This is guaranteed to be unique among
simultaneously existing objects.  (Hint: it's the object's memory address.)

二、靜態(tài)方法

靜態(tài)方法是一種普通函數(shù),就位于類定義的命名空間中,它不會對任何實例類型進行操作。使用裝飾器@staticmethod定義靜態(tài)方法。類對象和實例都可以調(diào)用靜態(tài)方法:

代碼如下:
class Foo:
    def __init__(self, name):
        self.name = name
    def hi(self):
        print self.name
    @staticmethod
    def add(a, b):
        print a + b

if __name__ == '__main__':
    foo01 = Foo('letian')
    foo01.hi()
    foo01.add(1,2)
    Foo.add(1, 2)
    運行結(jié)果如下:

代碼如下:
letian
3
3

注意,很多編程語言不允許實例調(diào)用靜態(tài)方法。

三、類方法

類方法是將類本身作為對象進行操作的方法。類方法使用@classmethod裝飾器定義,其第一個參數(shù)是類,約定寫為cls。類對象和實例都可以調(diào)用類方法:

代碼如下:
class Foo:
    name = 'letian '
    @classmethod
    def hi(cls, x):
        print cls.name * x

if __name__ == '__main__':
    foo01 = Foo()
    foo01.hi(2)
    Foo.hi(3)
運行結(jié)果如下:

代碼如下:
letian letian
letian letian letian

注意,很多其他的編程語言不允許實例調(diào)用類方法。

四、super

super用來執(zhí)行父類中的函數(shù),例如:

代碼如下:
class Foo(object):
    def hi(self):
        print 'hi,Foo'

class Foo2(Foo):
    def hi(self):
        super(Foo2, self).hi()

if __name__ == '__main__':
    foo2 = Foo2()
    foo2.hi()

運行結(jié)果:

代碼如下:
hi,Foo

注意,F(xiàn)oo類必須繼承某個類(并且這個繼承鏈開始于object類),否則會報錯。如果改成下面的形式:

代碼如下:
class Foo:
    def hi(self):
        print 'hi,Foo'

class Foo2(Foo):
    def hi(self):
        super(Foo2, self).hi()

if __name__ == '__main__':
    foo2 = Foo2()
    foo2.hi()
運行時報錯如下:

代碼如下:
......
TypeError: must be type, not classobj

五、類變量和實例變量

類變量定義在類的定義之后,實例變量則是以為self.開頭。例如:

代碼如下:

class Foo(object):
    val = 0
    def __init__(self):
        self.val = 1

if __name__ == '__main__':
    foo = Foo()
    print foo.val
    print Foo.val
運行結(jié)果為:

代碼如下:
1
0

實例也能夠訪問類變量,如下:

代碼如下:

class Foo(object):
    val = 0
    def __init__(self):
        pass
if __name__ == '__main__':
    foo = Foo()
    print foo.val
    print Foo.val


運行結(jié)果如下:

代碼如下:
0
0


另外,可以通過以下方式訪問類變量:

代碼如下:
class Foo(object):
    val = 3
    def __init__(self):
        print self.__class__.val
if __name__ == '__main__':
    foo = Foo()

運行結(jié)果:

代碼如下:
3

還可以這樣:

代碼如下:

class Foo(object):
    val = 3
    def __init__(self):
        pass
    @classmethod
    def echo(cls):
        print cls.val
if __name__ == '__main__':
    Foo.echo()


運行結(jié)果:

代碼如下:

3

六、如何調(diào)用父類的構(gòu)造函數(shù)

子類(派生類)并不會自動調(diào)用父類(基類)的init方法,例如:

代碼如下:

class Foo(object):
    def __init__(self):
        self.val = 1

class Foo2(Foo):
    def __init__(self):
        print self.val

if __name__ == '__main__':
    foo2 = Foo2()


運行時報錯。

調(diào)用父類的init方法有兩種,第一種:

代碼如下:

class Foo(object):
    def __init__(self):
        self.val = 1

class Foo2(Foo):
    def __init__(self):
        Foo.__init__(self)
        print self.val

if __name__ == '__main__':
    foo2 = Foo2()


第二種:

代碼如下:

class Foo(object):
    def __init__(self):
        self.val = 1

class Foo2(Foo):
    def __init__(self):
        super(Foo2,self).__init__()
        print self.val

if __name__ == '__main__':
    foo2 = Foo2()


這兩種方法的運行結(jié)果均為:

代碼如下:
1

不過這兩種方法是有區(qū)別的。


數(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(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 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){ //倒計時完成 $(".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); }