1、class的定义
class X(Y)
"Make a class named X that is-a Y."
class X(object): def __init__(self, J)
"class X has-a __init__ that takes self and J parameters."
class X(object): def M(self, J)
"class X has-a function named M that takes self and J parameters."
foo = X()
"Set foo to an instance of class X."
foo.M(J)
"From foo get the M function, and call it with parameters self, J."
foo.K = Q
"From foo get the K attribute and set it to Q."
In each of these where you see X, Y, M, J, K, Q, and foo you can treat those like blank spots. For example, I can also write these sentences as follows:
- "Make a class named ??? that is-a Y."
- "class ??? has-a __init__ that takes self and ??? parameters."
- "class ??? has-a function named ??? that takes self and ??? parameters."
- "Set foo to an instance of class ???."
- "From foo get the ??? function, and call it with self=??? and parameters ???."
- "From foo get the ??? attribute and set it to ???."
def __init__(self,voice='hello'): # 重载构造函数
self.voice = voice # 创建成员变量并赋初始值
def __del__(self): # 重载析构函数
dog = CAnimal('wow') # 定义动物对象dog
import random
class Die(object):
'''Simulate a 6-sided die.'''
def roll(self):
self.value = random.randint(0,5)
return self.value
def getValue(self):
return self.value
In this case, the private instance variable, value,will have a value in the range
. When getValue()adds 1, the value is in the usual range for a single die,
.
2、实际使用
def __init__(self,voice='hello'): # voice初始化默认为hello
class CDog(CAnimal): # 继承类CAnimal
def SetVoice(self,voice): # 子类增加函数
SetVoice
self.voice = voice
def Run(self,voice): # 子类重载函数Run
bobo.SetVoice('My Name is BoBo!') # 设置child.data为hello
class CAnimal:
def __init__(self,voice='hello'):
name = 'unname'
self.voice = voice
def Say(self):
print self.voice
def Run(self):
pass
class CDog(CAnimal):
def SetVoice(self,voice):
self.voice = voice
def Run(self):
print 'Running'
def main():
#t = CAnimal()
#t.Say()
#dog = CAnimal('wow')
#dog.Say() #调用class 1
bobo = CDog()
bobo.SetVoice('My name is BOBO')
bobo.Say()
bobo.Run() ##调用class 2
main()
3、实练
Stock Valuation
A Block of stock has a number of attributes, including apurchase price, purchase date, and number of shares. Commonly, methodsare needed to compute the total spent to buy the stock, and the currentvalue of the stock. A Position is the current ownership ofa company reflected by all of the blocks of stock. APortfoliois a collection ofPositions ; it has methods to computethe total value of allBlocks
When we purchase stocks a little at a time, each Block hasa different price. We want to compute the total value of the entire set ofBlock s, plus an average purchase price for the set ofBlocks.
The StockBlock class. First, define a StockBlock
StockBlock.
__init__
(
self, date, price, number_of_shares
)
Populate the individual fields of date, price and number ofshares. This isinformation which is part of thePosition, made up ofindividual blocks.
Don’t include the company name or ticker symbol.
StockBlock.
__str__
(
self
) → string
Return a nicely formatted string that shows the date, price and shares.
StockBlock.
getPurchValue
(
self
) → number
Compute the value as purchase price per share × shares.
Stockblock.
getSaleValue
(
self, salePrice
) → number
salePrice
StockBlock.
getROI
(
self, salePrice
) → number
Use salePrice
Note that this is not the annualized ROI. We’ll address this issue below.
#!/usr/bin/env python
class StockBlock(object):
""" A stock block class which has the purchase date,
price per share and number of shares. """
def __init__(self,purchDate,purchPrice,salePrice,shares): #形参提取database中数据的传递方法值得记住(名字要相同)
''' populate the individual fields of date,price,
and number of shares.'''
self.date = purchDate
self.price = purchPrice
self.saleprice = salePrice
self.number = shares
def getPurchValue(self):
'''compute the value as purchase price per share X shares.'''
purchvalue = self.price * self.number
return purchvalue
def getSaleValue(self):
'''compute the value as price per share X shares.'''
saleval(self):
'''computes the return on investment as(sale value - purchase value)/purchase value.'''
roi = (self.getSaleValue() - self.getPurchValue()) / self.getPurchValue() #不同def间进行数据交换的方法值得记住
return roi
def __str__(self):
'''return a nicely formatted string that shows the
date,price and shares.'''
return self.date,self.price,self.number
blocksGM = [
StockBlock( purchDate='25-Jan-2001', purchPrice=44.89, salePrice=54.32, shares=17 ),
StockBlock( purchDate='25-Apr-2001', purchPrice=46.12, salePrice=64.34, shares=17 ),
StockBlock( purchDate='25-Jul-2001', purchPrice=52.79, salePrice=75.32, shares=15 ),
StockBlock( purchDate='25-Oct-2001', purchPrice=37.73, salePrice=45.35, shares=21 ),
]
def main():
totalGM = 0
saleGM = 0
roiGM = 0
for s in blocksGM:
totalGM += s.getPurchValue()
saleGM += s.getSaleValue()
roiGM += s.getROI()
print(totalGM)
print(saleGM)
print(roiGM)
main()
>>> ================================ RESTART ================================
>>>
3131.35
4099.37
1.23387211239
>>>
不同def间进行数据交换的方法值得记住
#!/usr/bin/env python
class Calculate(object):
""" sum """
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
self.ab = 0
self.bc = 0
def getAB(self):
ab = self.a * self.b
return ab
def getBC(self):
bc = self.b * self.c
return bc
def getABC(self):
abc = self.getAB() + self.getBC()
return abc
def main():
sum = Calculate(2,4,6)
s = sum.getAB()
m = sum.getBC()
t = sum.getABC()
print s,m,t
main()
>>> ================================ RESTART ================================
>>>
8 24 32
>>>
The Position class. A separate class, Position, willhave an the name, symbol and a sequence ofStockBlocks
Position.
Position.
__init__
(
self, name, symbol, * blocks
)
StockBlockinstances.
Position.
__str__
(
self
) → string
Return a string that contains the symbol, the total number ofshares in all blocks and the total purchse price for all blocks.
Position.
getPurchValue
(
self
) → number
StockBlocksin this
Position. It delegates the hard part of thework to each
StockBlock‘s
getPurchValue()
Position.
getSaleValue
(
self, salePrice
) → number
getSaleValue() method requires a
salePrice;it sums the sale values for all of the
StockBlocks in this
Position. It delegates the hard part of the work to each
StockBlock‘s
getSaleValue()
Position.
getROI
(
self, salePrice
) → number
The getROI() methodrequires asalePrice; it computes the return oninvestment as (sale value - purchase value) ÷ purchase value. Thisis an ROI based on an overall yield.
#!/usr/bin/env python
class StockBlock(object):
""" A stock block class which has the purchase date,
price per share and number of shares. """
def __init__(self,date,price,saleprice,number):
''' populate the individual fields of date,price,
and number of shares.'''
self.date = date
self.price = price
self.number = number
self.saleprice = saleprice
def getPurchValue(self):
'''compute the value as purchase price per share X shares.'''
return self.price * self.number
def getSaleValue(self):
'''compute the value as price per share X shares.'''
return self.saleprice * self.number
def getROI(self):
'''computes the return on investment as(sale value - purchase value)/purchase value.'''
roi = (self.getSaleValue() - self.getPurchValue()) / self.getPurchValue()
return roi
def __str__(self):
'''return a nicely formatted string that shows the
date,price and shares.'''
return "%s %s %s"%(self.date, self.price, self.number)
def getDate(self):
return self.date
def getPrice(self):
return self.price
def getNumber(self):
return self.number
blocksGM = [
StockBlock('25-Jan-2001', 44.89, 54.23, 17),
StockBlock('25-Apr-2001', 46.12, 57.34, 17),
StockBlock('25-Jul-2001', 52.79, 64.23, 15),
StockBlock('25-Oct-2001', 37.73, 43.45, 21),
]
blocksEK = [
StockBlock('25-Jan-2001', 35.86, 37.45, 22),
StockBlock('25-Apr-2001', 37.66, 54.47, 21),
StockBlock('25-Jul-2001', 38.57, 47.48, 20),
StockBlock('25-Oct-2001', 27.61, 34.46, 28),
]
if __name__ == '__main__':
totalGM = 0
for s in blocksGM:
totalGM += s.getPurchValue()
print "date: ", s.getDate()
print "price: ", s.getPrice()
print "number: ", s.getNumber()
print "ROI:", s.getROI()
print totalGM
>>> ================================ RESTART ================================
>>>
date: 25-Jan-2001
price: 44.89
number: 17
ROI: 0.208064156828
date: 25-Apr-2001
price: 46.12
number: 17
ROI: 0.243278404163
date: 25-Jul-2001
price: 52.79
number: 15
ROI: 0.216707709794
date: 25-Oct-2001
price: 37.73
number: 21
ROI: 0.151603498542
3131.35
>>>
大致的计算框架总算是完成了!也算实际练习了下class的用法。