python继承组合 - ChannelCMT/OFO GitHub Wiki

Python继承组合

什么是继承?

你父亲有的你也有,但你有的特有属性和方法你父亲就没有。

1、 继承父类的属性与方法

class Stock:
    def __init__(self,stockName, price, volume):
        self.stockName=stockName
        self.price = price
        self.volume = volume
    def calAmount(self):
        return {self.stockName+'_Amount': self.price*self.volume}
    
class BABA(Stock):
    pass

b = BABA('BABA', 180, 30000).calAmount()
b
{'BABA_Amount': 5400000}

2、 属性覆盖

class Stock:
    def __init__(self,stockName, price, volume):
        self.stockName=stockName
        self.price = price
        self.volume = volume
    def calAmount(self):
        return {self.stockName+'_Amount': self.price*self.volume}

class BABA(Stock):
    pass

class TENCETN(Stock):
    pass

class BIDU(Stock):
    pass

class BuyMaxAmount(Stock):
    def __init__(self):
        self.haveCapital = True
    def buy(self):
        if self.haveCapital:
            print('I have cash to buy stock')
            self.haveCapital = False
        else:
            print("I don't have any cash now")
BuyMaxAmount('TENCETN', 350, 20000).calAmount()
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-6-64ba8ab1d9a5> in <module>()
----> 1 BuyMaxAmount('TENCETN', 350, 20000).calAmount()


TypeError: __init__() takes 1 positional argument but 4 were given

3、 Super函数

class Stock:
    def __init__(self,stockName, price, volume):
        self.stockName=stockName
        self.price = price
        self.volume = volume
    def calAmount(self):
        return {self.stockName+'_Amount': self.price*self.volume}

class BABA(Stock):
    pass

class BuyAmount(Stock):
    def __init__(self, stockName, price, volume):
        self.haveCapital = True
        super().__init__(stockName, price, volume)
    def buy(self):
        if self.haveCapital:
            print('I have cash to buy stock')
            self.haveCapital = False
        else:
            print("I don't have any cash now")
buyBABA = BuyAmount('BABA', 2500, 50000)
buyBABA.buy()
I have cash to buy stock

4、 类组合应用

class StockA:
    def __init__(self,price):
        self.price = price

class StockB:
    def __init__(self, price):
        self.price = price

class TwoStock:
    def __init__(self, priceA, priceB):
        self.stockA = StockA(priceA)
        self.stockB = StockB(priceB)
    def printStocks(self):
        print('StockA $ %d , StockB $ %d '% (self.stockA.price, self.stockB.price))

twoStock = TwoStock(220, 350)
twoStock.printStocks()
StockA $ 220 , StockB $ 350 
⚠️ **GitHub.com Fallback** ⚠️