首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OOP Python向基类添加了一些属性?

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

Stack Overflow用户
提问于 2011-04-15 20:20:21
回答 2查看 2.1K关注 0票数 2

我正在使用python .trying学习OOP和小型控制台应用程序Stock

代码语言:javascript
复制
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. --我在子程序中添加了一些属性--我收到了以下错误消息:

StockProduct = StockProduct("stock222",800,250,450000,0.9) TypeError错误:__init__()恰好有2个参数(6给定)

我应该在这里做什么?

有人能帮我吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-15 20:26:58

  1. 派生类中重载的invoice应该可以正常工作。
  2. 基类构造函数需要有所有参数,因此:

类StockProduct(股票):def __init__(self,stockName,stockLimit,inStock,rentPrice,factor):#基类构造函数: Stock.__init__(self,stockName,stockLimit,inStock,rentPrice) self.factor = factor def发票(self,nDay):返回Stock.invoice(self,nDay) * self.factor

票数 6
EN

Stack Overflow用户

发布于 2011-04-15 20:23:21

是的,您可以在python中执行方法重载。

2-您的子类更改了方法签名。你应该宣布它为

代码语言:javascript
复制
def __init__(self, stockName, stockLimit, inStock, rentPrice, factor):

如果您想用父类的所有参数再加上一些额外的参数来构造它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5681970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档