class ILinkedListElem:
@property
def value(self):
raise NotImplementedError
@property
def next(self):
raise NotImplementedError
class ListElem(ILinkedListElem):
def __init__(self, value, next_node=None):
self.value = value
self.next = next_node
我想要這樣的東西。此抽象變數定義適用于類變數,但不適用于實體
我希望 ILinkedListElem 子類的所有實體都必須具有“value”和“next”屬性
uj5u.com熱心網友回復:
如果您想強制/要求任何子類的所有實體ILinkedListElem都具有屬性“ value”和“ nxt”,則以下標準實作abstractmethod似乎可以滿足您的要求:
from abc import ABC, abstractmethod
class ILinkedListElem (ABC):
@property
@abstractmethod
def value(self):
raise NotImplementedError
@property
@abstractmethod
def nxt(self):
raise NotImplementedError
這是抽象類,我們從中創建一個兼容的子類:
class ListElem_good (ILinkedListElem):
def __init__(self, value, next_node=None):
self._value = value
self._nxt = next_node
@property
def value(self):
return self._value
@property
def nxt(self):
return self._nxt
我們創建這個兼容子類的實體并測驗它:
x = ListElem_good('foo', 'bar')
print (x.value)
print (x.nxt)
#result:
# foo
# bar
如果我們創建一個不兼容的子類,它省略了 的實作nxt,如下所示:
class ListElem_bad (ILinkedListElem):
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
當我們嘗試創建這個不兼容的子類的實體時:
y = ListElem_bad('foo')
print (y.value)
它失敗:
y = ListElem_bad('foo')
TypeError: Can't instantiate abstract class ListElem_bad with abstract methods nxt
這基本上依賴于此處提供的相同解決方案,您在評論交流中建議的解決方案不符合您的要求。但是當應用于您上面的特定用例時,它似乎準確地解決了您提出的問題 - 或者我誤解了嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537386.html
