python中有關類編寫過程中應該主要的一些問題

 

1、注意__init__ 的寫法

在python中我們如果要創建一個類,class則我們必須有個初始化函數__init__ ,但向我這種初學者一樣常常要搞錯該函數的名字。

__init__ 中 他的下劃線是兩條下劃線而不是一條。

如果寫成_init_的話,則會出現錯誤提示爲:this constructor takes no arguments

例子:

class Square:
    def __init__(self, side):
        self.side = side
    def calArea(self):
        return self.side**2
class Circle:
    #note that it is two "_" in the function __init__ ,that is it is "__ "but not" _"
    def __init__(self, r):
        self.r = r
    def calArea(self):
        import math
        return math.pi*(self.r**2)

list = [Circle(5) , Circle(7), Circle(9)]

for shape in list:
    print 'the area is :' , shape.calArea()

當我們在建立一個實例時,初始化的參數,有__init__函數決定。如果__init__(self , para1,para2,...para n)

則創建實例是應該是 m = Circle(para1,para2,...para n)

記住,self函數相當與C中的this 指針,在創建實例中他將被忽略。他由系統調用

2、我們在編寫類時,要注意類中的函數其函數聲明時,他的形參列表中的第一個必須是self,否則會出錯。

如:def printIt(self, para1 ,para2,...para n),

而在函數體的實現中我們可以完成不用到self

如:

class Message:
    def __init__(self,aString):
        self.text = aString
    def printIt(self , str):
        print str

3、類繼承的寫法

如果Base 是基類,Inherit是繼承類,則

class Inherit(Base):

在子類中調用父類的方法是必須加上父類的名稱

如:class Base :

              def __init__(self,aString):

                            self.text = aString

              def printIt(self,str)

                      print self.text ,str

      class Inherit(Base):

                 def printIt(self,str):

                        Base.printIt(str)

                        print "ping"

注意:子類中可以不用重新編寫__init__函數,而他會直接調用父類的初始化函數初始化。

也可以在子類中自己重新定義__init__函數,並也可以在該函數中調用父類的__init__

class InheritMessage(Message):
    def __init__(self,aString):
        Message.__init__(self, aString)
        print 'helloworld'

3、子類在重寫父類方法時,如果調用該父類的該方法,則必須該方法的參數還是要加上self

如:

    class ChargingAccount(BankAccount):
        def __init__(self,initAccount):
            BankAccount.__init__(self, initAccount)
            self.fee = 3
        def withdraw(self,amount):
            BankAccount.withdraw(self,amout + self.fee)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章