logo
Loading...

__init__的問題????????? - Cupoy

class Circle:         PI = 3.14         def __init...

__init__的問題?????????

2020/07/19 下午 04:36
機器學習共學討論版
江柏勳
觀看數:36
回答數:2
收藏數:0

class Circle:    

     PI = 3.14    

     def __init__(self, r=1):

        self.radius = r 

     def getArea(self):        

        return self.PI * self.radius * self.radius

C1 = Circle()

print("半徑為", C1.radius, "的圓面積為", C1.getArea()) #利用變數存取類別中的變數

C2 = Circle(10)

print("半徑為", C2.radius, "的圓面積為", C2.getArea())


想請問各位就是,__init__的作用是甚麼(這個是必要的寫法嗎?)

然後就是可以解釋一下C1.radius在運作過程嗎?

然後有沒有可能就是可以把.radius的寫法改成像函式的寫法?

(想說這是python的問題來這邊問問)

(這是網路上的例子)

回答列表

  • 2020/07/19 下午 06:56
    張維元 (WeiYuan)
    贊同數:0
    不贊同數:0
    留言數:1

    這個稱為建構式(constructor),用來初始化物件。 如果這個回答對你有幫助請主動點選「有幫助」或「最佳解答」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎再開一個新的問題繼續發問(留言在原本的討論底下我可能不會回覆)或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃

  • 2020/07/21 上午 01:25
    劉冠宏
    贊同數:0
    不贊同數:0
    留言數:0

    柏勳您好

    這裡的__init__()是在python類別中定義的特別的方法(method),這個方法是在物件建立的時候會做初始化執行的,其稱作建構子(constructor)。


    其實在python中,所有的類別都是繼承“object"類,而在你舉的例子中的__init__其實是覆寫(override)了父類別的__init__。


    當然你不一定要定義覆寫__init__,你的舉裡也可以改寫為


    #注意這裡我們沒有定義__init__

    class Circle(object):    

        PI = 3.14   

        def getArea(self, r):        

           return self.PI * r * r


    C1 = Circle()

    print("圓面積為", C1.getArea(1)) 


    因為我們沒有初始化定義radius,因此在執行getArea時需多輸入一個變數叫r(代表radius)


    但習慣上,在自定義類別的時候,會有一些類別的初始化參數需要定義,這時候就會將其定義在__init__中。 希望有回答到你的疑惑 :)