1. 程式人生 > >Python: 類中為什麼要定義__init__()方法

Python: 類中為什麼要定義__init__()方法

學習並轉自:https://blog.csdn.net/geerniya/article/details/77487941

 

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__)

out
14
12
{'a': 3, 'b': 4}

 定義完init()後,建立的每個例項都有自己的屬性,也方便直接呼叫類中的函式。