OOP Python向基类添加一些属性吗?

问题描述

| 我正在使用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):
如果要使用父类的所有参数以及其他一些参数来构造它。