摘要:類方法類內(nèi)部定義的方法外部方法定義在類外的方法,但是帶上了參數(shù)。具體做法是通過給類一個實例綁定外部方法。例如創(chuàng)建新的實例嘗試調(diào)用該方法報錯若要給類的所有實例綁定外部方法,則需要給類動態(tài)綁定該方法。
類方法:類內(nèi)部定義的方法
外部方法:定義在類外的方法,但是帶上了self參數(shù)。
居于動態(tài)語言的靈活性,我們知道可以動態(tài)的給實例綁定屬性,那是否可以給實例綁定一個方法,成為實例方法。
例如:
class Student(object): pass >>>s = Student() >>>s.name = "xlp" # 動態(tài)語言的靈活性:動態(tài)給實例綁定一個屬性 def set_age(self,age) # 定義一個外部方法:set_age(),不是class里的 self.age = age
可以創(chuàng)建一個鏈接把外部的set_age()方法鏈接到Student內(nèi)。
具體做法是:通過MethodType給類一個實例綁定外部方法。
from types import MethodType # ##???? s.set_age = MethodType (set_age,s) # 給實例綁定一個方法 s.set_age(24) # 調(diào)用實例方法 s.age #測試結果 24
但是該方法對除開實例s,對其他實例是不起作用的。
例如:
s2 = Student() # 創(chuàng)建新的實例 s2.set_age(25) # 嘗試調(diào)用該方法 # 報錯 #Traceback (most recent call last): # File "", line 1, in #AttributeError: "Student" object has no attribute "set_age"
若要給類的所有實例綁定外部方法,則需要給類動態(tài)綁定該方法。
>>>def set_score(self,score): self.score = score >>>Student.set_score = set_score # 直接用類來創(chuàng)建一個方法 >>> s.set_score(100) >>> s.score 100 >>> s2.set_score(59) >>> s2.score 59
此時實例和類都指向同一個set_score()。
通常,上面的set_score()方法一般直接定義在class中,但動態(tài)綁定允許我們在程序運行的過程中動態(tài)地給class加上功能。
? thanks for watching, keep on updating...
點個贊再走吧
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44980.html
摘要:每個內(nèi)部類都能獨立地繼承一個接口,而無論外部類是否已經(jīng)繼承了某個接口。因此,內(nèi)部類使多重繼承的解決方案變得更加完整。內(nèi)部類中的與其他類一樣是指的本身。但是靜態(tài)內(nèi)部類卻沒有。 問題:內(nèi)部類、靜態(tài)內(nèi)部類區(qū)別、使用場景? 1.靜態(tài)內(nèi)部類可以有靜態(tài)成員(方法,屬性),而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員(方法,屬性)。 2.靜態(tài)內(nèi)部類只能夠訪問外部類的靜態(tài)成員,而非靜態(tài)內(nèi)部類則可以訪問外部類的所有...
摘要:方法內(nèi)部類就是局部內(nèi)部類,一般定義在類的局部位置,它可以訪問當前代碼塊及外部類的所有變量。 今天溫習一下 Java 中的內(nèi)部類,內(nèi)部類一般有如下幾種:靜態(tài)內(nèi)部類、成員內(nèi)部類、匿名內(nèi)部類和方法內(nèi)部類,下文中將主要介紹靜態(tài)內(nèi)部類和成員內(nèi)部類,主要內(nèi)容如下: 概述 靜態(tài)內(nèi)部類 成員內(nèi)部類 匿名內(nèi)部類和方法內(nèi)部類 總結 概述 顧名思義內(nèi)部類就是在一個類內(nèi)部定義的類,它是內(nèi)部類是一個獨立的類...
內(nèi)部類 內(nèi)部類主要作用 內(nèi)部類提供了更好的封裝,可以吧內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類。 內(nèi)部類成員可以直接訪問外部類的私有數(shù)據(jù),因為內(nèi)部類被當成其外部類成員,同一個類的成員之間可以互相訪問,但外部類不能訪問內(nèi)部類的實現(xiàn)細節(jié)。 匿名內(nèi)部類適合用于創(chuàng)建那些僅需要使用一次的類。 定義內(nèi)部類與外部類的語法大致相同,內(nèi)部類除需要定義在其他類里面之外,還有兩點區(qū)別: 內(nèi)...
摘要:對于一個名為的外圍類和一個的內(nèi)部類,在編譯成功后,會出現(xiàn)這樣兩個文件和。 Java知識點總結(三個步驟) @(Java知識點總結)[Java, Java面向?qū)ο骫 [toc] 1-定義類 修飾符 訪問修飾符: public protected default private 其他修飾符 abstract:抽象類不能實例化,專門用于繼承的類final:最終類不能被繼承 類名(駝峰命名...
摘要:即使抽象類里不包含抽象方法,這個抽象類也不能創(chuàng)建實例抽象類可以包含成員變量方法普通方法和抽象方法構造器初始化塊內(nèi)部類接口枚舉種成分。 抽象類 當編寫一個類時,常常會為該類定義一些方法,這些方法用以描述該類的行為方式,那么這些方法都有具體的方法體。但在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確地知道這些子類如何實現(xiàn)這些方法。使用抽象方法即可滿足該要求:抽象方法是只有...
閱讀 2629·2021-11-23 09:51
閱讀 861·2021-09-24 10:37
閱讀 3612·2021-09-02 15:15
閱讀 1962·2019-08-30 13:03
閱讀 1881·2019-08-29 15:41
閱讀 2624·2019-08-29 14:12
閱讀 1424·2019-08-29 11:19
閱讀 3301·2019-08-26 13:39