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)