from_string我正在使用 python Enums,我想通過將方法移動到父類來稍微干燥我的代碼
from enum import Enum
class Base(Enum):
def __str__(self):
return self.value
@staticmethod
def from_string(string: str):
try:
return Base[string]
except KeyError as e:
raise ValueError(e)
class DeSwitch(Base):
aus= 'aus'
zu = 'zu'
def __init__(self):
super().__init__()
class EnSwitch(Base):
on = 'on'
off = 'off'
def __init__(self):
super().__init__()
def main():
print(EnSwitch.from_string('off'))
print(DeSwitch.from_string('aus'))
if __name__ == "__main__":
main()
但是這樣做之后我收到以下錯誤
Traceback (most recent call last):
File "main.py", line 18, in <module>
class EnSwitch(Base):
File "/usr/lib/python3.8/enum.py", line 252, in __new__
enum_member.__init__(*args)
TypeError: __init__() takes 1 positional argument but 2 were given
有人可以幫我理解我的例子有什么問題嗎?
uj5u.com熱心網友回復:
Base[string]將呼叫__new__列舉的 dunder 方法。
__new__然后將使用字串作為引數 ( enum_member.__init__(*args)) 呼叫列舉類的初始化程式。
因此,為了使您的代碼正常作業,您應該向初始化程式添加另一個引數
def __init__(self, value):
super().__init__()
還from_string嘗試創建 Base 的實體,而您應該創建其中一個子類的實體。您可以通過使其成為類方法來做到這一點。
@classmethod
def from_string(cls, string: str):
try:
return cls[string]
except KeyError as e:
raise ValueError(e)
只要您實際上不對初始化程式做任何事情,您也可以洗掉它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/526639.html
上一篇:mongodb將繼續創建一個新的購物車,而不是使用以前創建的購物車我該如何解決這個問題?
下一篇:JS箭頭函式回傳自我不是函式
