python - 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, stockName, stockLimit, inStock, 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,factor):
        # the base-class constructor:
        Stock.__init__(self, stockName, stockLimit, inStock, rentPrice)
        self.factor = factor # Extra for this stock

    def invoice(self,nDay):
        return Stock.invoice(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))

我有两个问题:

  1. 使用我的方法 invoice,如何在 python 中进行方法重载?
  2. 我在 child 中添加了一些属性,但收到以下错误消息:

    StockProduct = StockProduct("stock222",800, 250, 450000, 0.9)
    TypeError
    
    error: __init__() takes exactly 2 arguments (6 given)
    

我应该在这里做什么?

有人可以帮帮我吗?

提前致谢

最佳答案

  1. 派生类中重载的 invoice 应该可以正常工作。

  2. 您的基类构造函数需要具有所有参数,因此:

    class StockProduct(Stock):
        def __init__(self, stockName, stockLimit, inStock, rentPrice, factor):
            # the base-class constructor:
            Stock.__init__(self, stockName, stockLimit, inStock, rentPrice)
            self.factor = factor
    
        def invoice(self, nDay):
            return Stock.invoice(self, nDay) * self.factor
    

https://stackoverflow.com/questions/5681970/

相关文章:

php - 尝试在 php 中为在线商店实现促销代码框

performance - C# 和 C++ 可以互操作高性能代码吗?

django - 区分 ModelAdmin 媒体以在 Django 中添加/更改页面

.net - 转义中间字符串百分号,正则表达式是最好的选择吗?

sql-server - SQL 服务器 : select without order

math - 需要给定排名和底池金额的奖品奖励功能

regex - 正则表达式和 sed 从数百个文件中删除某些字符串的所有出现

WPF - TextBlock 文本 + 超链接

file - 使用 cURL 检查文件是否存在于 FTPS 站点上

python - 始终返回数组的 numpy 切片