1. 程式人生 > >python之類與對象(3)

python之類與對象(3)

target 實例化 定義 方法 int () a* 創建 但是

4. 類的初始化函數__init__():

本章參考:https://blog.csdn.net/hellocsz/article/details/82795514 原作者: hellocsz

總結一下, 加上__init__()方法後,類才可以實例化,不加類就是個空殼,相當於一個方法集合

學習Python的類,一直不太理解為什麽一定要定義init()方法,現在簡要談一下自己的理解吧。

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

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

class Rectangle():

def getPeri(self,a,b):

return (a + b)*2

def getArea(self,a,b):

return a*b

rect = Rectangle()

print(rect.getPeri(3,4))

print(rect.getArea(3,4))

print(rect.__dict__)

得到結果:

14

12

{}

從上例中可以看到,我們在類中並沒有定義init()方法,但是也能夠得到類似的要求,結果返回了矩形實例rect的周長及面積。

但是,我們通過print(rect.dict)來看這個實例的屬性,竟然是空的,我定義了一個矩形,按理來說它的屬性應該是它的長、寬。但是它竟然沒有。這就是沒有定義init()的原因了。

並且,在實例化對象的時候,rect = Rectangle()參數為空,沒有指定a、b的值,只有在調用函數的時候才指定了。且類中定義的每個方法的參數都有a、b,這顯然浪費感情,在類中直接指定方法就可以了。、

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

2、用init()方法定義類

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

class Rectangle():

def __init__(self,a,b):

self.a = a

self.b = b

def getPeri(self):

return (self.a + self.b)*2

def getArea(self):

return self.a * self.b

rect = Rectangle(3,4)

print(rect.getPeri())

print(rect.getArea())

print(rect.__dict__)

得到結果:

14

12

{‘a‘: 3, ‘b‘: 4}

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

python之類與對象(3)