第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

自我的目的是什么?

自我的目的是什么?

蝴蝶不菲 2019-05-22 15:46:09
自我的目的是什么?selfPython 中這個(gè)詞的目的是什么?我理解它指的是從該類創(chuàng)建的特定對(duì)象,但我不明白為什么它明確需要作為參數(shù)添加到每個(gè)函數(shù)。為了說明,在Ruby中我可以這樣做:class myClass    def myFunc(name)         @name = name    endend我很容易理解。但是在Python中我需要包括self:class myClass:     def myFunc(self, name):         self.name = name誰能跟我說說這個(gè)?這不是我在(無可否認(rèn)有限的)經(jīng)歷中遇到的事情。
查看完整描述

5 回答

?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

我將演示不使用類的代碼:

def state_init(state):
    state['field'] = 'init'def state_add(state, x):
    state['field'] += xdef state_mult(state, x):
    state['field'] *= xdef state_getField(state):
    return state['field']myself = {}state_init(myself)state_add(myself, 'added')state_mult(myself, 2)print( state_getField(myself) )
    #--> 'initaddedinitadded'

類只是一種避免一直傳遞這種“狀態(tài)”的東西的方法(以及其他很好的東西,比如初始化,類組合,很少需要的元類,以及支持自定義方法來覆蓋運(yùn)算符)。

現(xiàn)在讓我們使用內(nèi)置的python類機(jī)器演示上面的代碼,以顯示它是如何基本相同的。

class State(object):
    def __init__(self):
        self.field = 'init'
    def add(self, x):
        self.field += x    def mult(self, x):
        self.field *= x

s = State()s.add('added')    # self is implicitly passed ins.mult(2)         # self is implicitly passed inprint( s.field )


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

您需要使用的原因self.是因?yàn)镻ython不使用@語法來引用實(shí)例屬性。Python的決定做方法的方式,使該實(shí)例該方法屬于可通過自動(dòng),但不接受自動(dòng):方法的第一個(gè)參數(shù)是實(shí)例的方法被調(diào)用。這使方法與函數(shù)完全相同,并留下實(shí)際名稱以供您使用(雖然self是慣例,當(dāng)您使用其他東西時(shí),人們通常會(huì)對(duì)您不滿。)self對(duì)代碼來說并不特殊,它只是另一個(gè)對(duì)象。

Python可以做其他事情來區(qū)分普通名稱和屬性 - 像Ruby這樣的特殊語法,或者需要像C ++和Java那樣的聲明,或者可能是更不同的東西 - 但它沒有。Python的所有內(nèi)容都是為了使事情變得明確,讓它顯而易見的是什么,雖然它并不是完全在任何地方完成,但它確實(shí)是為了實(shí)例屬性。這就是為什么分配一個(gè)實(shí)例屬性需要知道要分配的實(shí)例,這就是它需要的原因self.。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

我們來看一個(gè)簡(jiǎn)單的矢量類:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

我們想要一個(gè)計(jì)算長(zhǎng)度的方法。如果我們想在類中定義它會(huì)是什么樣子?

    def length(self):
        return math.sqrt(self.x ** 2 + self.y ** 2)

當(dāng)我們將它定義為全局方法/函數(shù)時(shí),它應(yīng)該是什么樣子?

def length_global(vector):
    return math.sqrt(vector.x ** 2 + vector.y ** 2)

所以整個(gè)結(jié)構(gòu)保持不變。我怎么能利用這個(gè)呢?如果我們假設(shè)我們沒有length為我們的Vector類編寫方法,我們可以這樣做:

Vector.length_new = length_global
v = Vector(3, 4)print(v.length_new()) # 5.0

這是因?yàn)榈谝粋€(gè)參數(shù)length_global,可以重新用作self參數(shù)length_new。如果沒有明確的話,這是不可能的self。


理解顯式需求的另一種方法self是查看Python添加一些語法糖的位置。當(dāng)你記住,基本上,一個(gè)電話就像

v_instance.length()

內(nèi)部轉(zhuǎn)變?yōu)?/p>

Vector.length(v_instance)

很容易看到self適合的位置。你實(shí)際上并沒有在Python中編寫實(shí)例方法; 你寫的是類方法,它必須將實(shí)例作為第一個(gè)參數(shù)。因此,您必須明確地將實(shí)例參數(shù)放在某處。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

假設(shè)您有一個(gè)類ClassA,其中包含一個(gè)methodA定義為的方法:

def methodA(self, arg1, arg2):
    # do something

并且ObjectA是這個(gè)類的一個(gè)實(shí)例。

現(xiàn)在ObjectA.methodA(arg1, arg2)調(diào)用時(shí),python會(huì)在內(nèi)部將其轉(zhuǎn)換為:

ClassA.methodA(ObjectA, arg1, arg2)

self變量是指對(duì)象本身。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
  • 5 回答
  • 0 關(guān)注
  • 765 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)