问题描述
|
我正在使用python学习OOP。尝试使用小型控制台应用程序
Stock
class Stock(object):
def __init__(self,stockName,stockLimit,inStock,rentPrice):
self.stockName = stockName # private
self.stockLimit = stockLimit # private
self.inStock = inStock # private
self.rentPrice = rentPrice # private
def inputStock(self,nProduct):
if(nProduct >= (self.stockLimit - self.inStock)):
self.inStock = self.stockLimit
else:
self.inStock += nProduct
def invoice(self,nDay):
return self.rentPrice * nDay
class StockProduct(Stock):
def __init__(self,factor):
# the base-class constructor:
Stock.__init__(self,rentPrice)
self.factor = factor # Extra for this stock
def invoice(self,nDay):
return Stock.invoice(self,nDay) * self.factor
class StockMaterial(Stock):
def __init__(self,nDay)*self.factor
if __name__ == \"__main__\":
N = nDay = 0
myStock = Stock(\"stock111\",500,200,400000)
N = float(raw_input(\"How many product into stock: \"+str(myStock.stockName)+\" ? \"))
myStock.inputStock(N)
nDay = int(raw_input(\"How many days for rent : \"+str(myStock.stockName)+\" ? \"))
print \"Invoice for rent the stock: \"+str(myStock.stockName)+ \" = \"+ str(myStock.invoice(nDay))
StockProduct = StockProduct(\"stock222\",800,250,450000,0.9)
N = float(raw_input(\"How many product into stock: \"+str(StockProduct.stockName)+\" ? \"))
StockProduct.inputStock(N)
nDay = int(raw_input(\"How many days for rent : \"+str(StockProduct.stockName)+\" ? \"))
print \"Invoice for rent the stock: \"+str(StockProduct.stockName)+ \" = \"+ str(StockProduct.invoice(nDay))
我有两个问题:
使用我的方法invoice
,如何在python中进行方法重载?
我在孩子中添加了一些属性,但收到以下错误消息:
StockProduct = StockProduct(\"stock222\",0.9)
TypeError
error: __init__() takes exactly 2 arguments (6 given)
我应该在这里做什么?
有人可以帮我吗?
预先感谢
解决方法
派生类中的重载
invoice
应该可以正常工作。
您的基类构造函数需要具有所有参数,因此:
class StockProduct(Stock):
def __init__(self,stockName,stockLimit,inStock,rentPrice,factor):
# the base-class constructor:
Stock.__init__(self,rentPrice)
self.factor = factor
def invoice(self,nDay):
return Stock.invoice(self,nDay) * self.factor
,1-是的,您可以在python中进行方法重载。
2-您的子类更改了方法签名。您应该将其声明为
def __init__(self,factor):
如果要使用父类的所有参数以及其他一些参数来构造它。