[英]2 constructor class in 1 constructor class in Python
我正在嘗試使用此代碼將 2 個構造函數 class 放入 1 個構造函數 class 中,但是:
class Buy:
def __init__(self, buy_value: float, buy_currency: str) -> None:
self.buy_value = buy_value
self.buy_currency = buy_currency
class Sell:
def __init__(self, sell_value: float, sell_currency: str) -> None:
self.sell_value = sell_value
self.sell_currency = sell_currency
class isCash(Buy,Sell):
def __init__(self, buy_value, buy_currency,sell_value, sell_currency) -> None:
super().__init__(buy_value, buy_currency)
super().__init__(sell_value,sell_currency)
obj1 = isCash(Buy(1,"mnt"),Sell(2,"mnt"))
print(obj1.__dict__)
結果
{'buy_value': 2, 'buy_currency': 'mnt'}
如您所見,出售 DICT 已不復存在。 無論如何我可以做到這一點。
{
"buy": {
"buy_value": 1,
"buy_currency": "MNT"
},
"sell": {
"sell_value": 1,
"sell_currency": "MNT"
},
}
您的兩個 super() 都將構造函數調用為 Buy,因此 Sell 總是被忽略。 您需要修改第二個 super 以在 Buy 之后顯式調用構造函數。 您可以更新您的購買和銷售 class 以實現您的預期命令。 您還應該更正初始化。
class Buy:
def __init__(self, buy_value: float, buy_currency: str) -> None:
self.buy = {
'buy_value': buy_value,
'buy_currency': buy_currency.upper()
}
class Sell:
def __init__(self, sell_value: float, sell_currency: str) -> None:
self.sell = {
'sell_value': sell_value,
'sell_currency': sell_currency.upper()
}
class isCash(Buy,Sell):
def __init__(self, buy_value, buy_currency,sell_value, sell_currency) -> None:
super().__init__(buy_value, buy_currency)
super(Buy, self).__init__(sell_value, sell_currency)
obj1 = isCash(1,"mnt",2,"mnt")
print(obj1.__dict__)
Output:
{'buy': {'buy_value': 1, 'buy_currency': 'MNT'},
'sell': {'sell_value': 2, 'sell_currency': 'MNT'}}
super().__init__
以定義的順序調用第一個父類。 因此,您的第二個會覆蓋第一個的結果。 您需要使用顯式轉發:
Buy.__init__(self, buy_value, buy_currency)
Sell.__init__(self, sell_value, sell_currency)
但是,您調用isCash
的方式是錯誤的。 你所需要的:
obj1 = isCash(1,"mnt",2,"mnt")
您是否真的想使用封裝,而不是 inheritance?
class isCash:
def __init__(self, buy, sell):
self.buy = buy
self.sell = sell
該定義符合您的用法。
如果您打算將字典作為 class 的兩個不同屬性,那么您不需要繼承,它將按方法解析順序調用構造函數(參見此處),而是需要封裝。 下面的代碼應該適用於這個實現:
import json
class Buy:
def __init__(self, buy_value: float, buy_currency: str) -> None:
self.buy_value = buy_value
self.buy_currency = buy_currency
class Sell:
def __init__(self, sell_value: float, sell_currency: str) -> None:
self.sell_value = sell_value
self.sell_currency = sell_currency
class isCash:
def __init__(self, buy_value, buy_currency,sell_value, sell_currency) -> None:
self.buy = Buy(buy_value, buy_currency)
self.sell = Sell(sell_value,sell_currency)
obj1 = isCash(1,"mnt",2,"mnt")
print(json.loads(json.dumps(obj1, default=lambda o: o.__dict__)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.