我想要一個超類,作為其介面的一部分,它提供一個變數(或一個 getter 函式),并允許(但不需要)一個繼承者來設定這個值。如下:
class A(object):
def __init__(self):
self._value = DEFAULT_VALUE
def value(self):
return self._value
class B(A):
def __init__(self, value):
self._value = value
super().__init__()
class C(A):
def __init__(self):
#note this class does not care about setting value
super.__init__()
但是,super 的 init 將覆寫 B 所做的任何自定義設定。如果我不在超類中設定它,然后子類不想實作它,那么任何使用該變數的東西都會失敗。
如何在超類中創建此變數而不覆寫子類可能想要設定的內容?
uj5u.com熱心網友回復:
如評論中所述,您可以在呼叫后簡單地進行特定于子類的初始化super().__init__:
class B(A):
def __init__(self, value):
super().__init__()
# time to overwrite that default value
self._value = value
如果沒有必要,您也可以不打電話super().__init__:
class B(A):
def __init__(self, value = None):
if value is None:
# fallback to default
super().__init__()
else:
# otherwise set value from caller
self._value = value
b = B()
print(b.value()) # prints the default value
b = B("overridden value")
print(b.value()) # prints "overridden value"
uj5u.com熱心網友回復:
編輯:根據 Simon Hawe 的評論更新
你可以這樣做:
class A(object):
def __init__(self, value=DEFAULT_VALUE):
self._value = value
def value(self):
return self._value
class B(A):
def __init__(self, value):
super().__init__(value)
_value如果子類沒有為super().__init__()呼叫提供值,現在只會是默認值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407837.html
標籤:
下一篇:無法從簡單類結構中的錯誤轉換
