亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【學習筆記】Python類中self與__init__()方法

系統 1619 0

一、self

1、含義

類的方法與普通的函數只有一個特別的區別?——?它們必須有一個額外的第一個參數名稱,但是在調用這個方法的時候你不為這個參數賦值,?Python?會提供這個值。這個特別的變量指對象本身,按照慣例它的名稱是?self。

--- 摘自《A Byte of Python3(中文版)》

? ?在類方法中,按慣例第一個第一個參數通常都稱為self,這個參數給方法提供一個鉤子,從而返回調用的主體,也就是實例對象:因為類可以產生許多實例對象,所以需要這個參數來管理每個實例彼此不同的的數據。 ?

--- 摘自《Python學習手冊第3版》

通過上面2段描述可以把self簡單理解為實例本身,一般對類進行實例化得到一個實例對象后,通過點記法來調用類中的方法,如下

            
              Object.method(arg1, arg2) 
            
          

等價于

            
              Class.method(Object, arg1, arg2) 
            
          

? ?self就是指Object

2、例子

            
              def sub(a,b):
    print("this outside sub")
    return a-b

class MyOperation:
    
    def sub(self,a,b):
        print("this inner sub")
        return a-b
    
    def mix(self,a,b):
        print(self.sub(a,b))
        print(sub(a,b))

r=MyOperation()  #得到一個MyOperation類的實例
t=r.mix(5,8)     #調用類里面的方法,此處等價于MyOperation.mix(r,5,8)
            
          

?

Notes:

(1)?為了達到能夠通過實例來調用類中方法的目的,每個方法都必須有一個self參數 (這也是類方法和普通函數的區別)

(2)在mix()方法中通過self調用的是類里面定義的sub(),否則是調用的類外面的函數sub()。

?

二、__init__()方法

1. 不用 init ()方法定義類

定義一個三角形的類,目的是求周長和面積。

            
              import math
class Triangle():
    def getPeri(self,a,b,c):
        return a+b+c
    def getArea(self,a,b,c):
        p=(a+b+c)/2
        return math.sqrt(p*(p-a)*(p-b)*(p-c))
 
tri = Triangle()
print(tri.getPeri(3,4,5))
print(tri.getArea(3,4,5))
print(tri.__dict__)
# 輸出結果:12 6.0 {}
            
          

從上例中可以看到,在類中并沒有定義init()方法,但是也能夠得到類似的要求,結果返回了三角形實例tri的周長及面積。?但是,我們通過print(tri.dict)來看這個實例的屬性,竟然是空的,我們定義了一個三角形,按理來說它的屬性應該是它的三邊。但是它竟然沒有。這就是沒有定義init()的原因了。并且,在實例化對象的時候,tri?= Triangle()參數為空,沒有指定a、b、c的值,只有在調用函數的時候才指定了。且類中定義的每個方法的參數都有a、b、c,這顯然浪費感情,在類中直接指定方法就可以了。

因此,需要在類中定義init()方法,方便創建實例的時候,需要給實例綁定上屬性,也方便類中的方法(函數)的定義。
?

2、用init()方法定義類?

上述同樣的例子,采用init()方法定義類,如下:

            
              import math
class Triangle():
    def __init__(self,a,b,c):
        self.a=a
        self.b=b
        self.c=c
    def getPeri(self):
        return self.a+self.b+self.c
    def getArea(self):
        p=(self.a+self.b+self.c)/2
        return math.sqrt(p*(p-self.a)*(p-self.b)*(p-self.c))
 
tri = Triangle(3,4,5)
print(tri.getPeri())
print(tri.getArea())
print(tri.__dict__)
# 輸出結果:12 6.0 {'a': 3, 'b': 4, 'c': 5}
            
          

?定義完 init ()后,創建的每個實例都有自己的屬性,也方便直接調用類中的函數。

?

參考文章:

1.?https://www.cnblogs.com/hanmk/p/9007689.html

2.?https://fishc.com.cn/thread-115047-1-1.html

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美在线观看一区二区三 | 日韩成人精品在线 | 另类亚洲视频 | 日本不卡中文字幕 | www.4虎影院| 麻豆传煤一区免费入 | 国产自精品在线 | 久久国产精品伦理 | 亚洲精品国产成人专区 | 一级毛片高清 | 美女又黄又免费的视频 | 米奇777第四久久久99 | 欧美亚洲日本国产综合网 | 国产精品美女一区二区三区 | 国产精品视频在 | 亚洲精品123区在线观看 | 欧美一级大片在线观看 | 日本一区二区日本免费 | 免费看一级毛片 | 国产图区 | 成人一区二区免费中文字幕 | 久青草免费视频 | 亚洲综合性图 | 欧美性生活在线 | 一级毛片不卡免费看老司机 | 欧美人与鲁交大毛片免费 | 免费精品精品国产欧美在线 | 国产观看精品一区二区三区 | 亚洲性夜夜时 | 美女久久精品 | 国产人成精品免费视频 | 91中文字幕 | 夜夜爱夜夜操 | 亚洲精品中文字幕乱码三区一二 | 在线精品福利 | 奇米影视7777久久精品人人爽 | 久久久噜噜噜久久老司机 | 99热久久久久久久免费观看 | 四虎影视在线影院在线观看观看 | 中文字幕欧美在线观看 | 四虎免费在线观看视频 |