我知道這是一個簡單的問題,但我不知道這叫什么,我在網上找不到任何細節......
使用Python 2.6,我只是希望能夠參考一些在類中定義的預定義值。我希望用戶能夠在使用類時參考它們,并在驗證傳遞給類函式的引數時在類中使用這些值。
在我的示例中,允許有四種不同的嚴重性級別。目前,用戶需要使用Issue.severity_levels["critical"]來檢索關鍵問題的正確值。我希望他們能夠使用Issue.severity_levels.critical。我還希望能夠用來if severity not in severity_levels:驗證傳遞給函式的嚴重性引數。
我的例子:
class Issue:
severity_levels = {"critical": "critical", "info": "info", "warning": "warning",
"error": "error"}
@classmethod
def page_out(description, ticket, details, severity="critical", custom=None):
# Normalize severity
severity = severity.lower()
# Stop with error on a bad severity level
if severity not in severity_levels:
raise ValueError("Invalid severity")
# do stuff...
這個叫什么?如何在 Python 2.6 中實作它?(是的,那很舊,但那是我們當前作業的環境。它正在被替換,但新系統還沒有準備好。)
uj5u.com熱心網友回復:
這可以通過結合namedtuple(根據互聯網,這是在 Python 2.6 中引入的)和類屬性(據我所知,也可用)來完成。
namedtuple像元組和字典的組合一樣作業(也像迷你類)。您可以使用點符號按名稱訪問元素,還可以像使用常規元組一樣檢查是否包含。你甚至可以索引它們。
from collections import namedtuple
# Define the namedtuple
Levels = namedtuple('Levels', ['critical', 'info', 'warning', 'error'])
class Issue:
# Create the class attribute, an instance of the namedtuple defined above
severity_levels = Levels('critical', 'info', 'warning', 'error') #= {"critical": "critical", "info": "info", "warning": "warning", "error": "error"}
@classmethod
def page_out(description, ticket, details, severity="critical", custom=None):
# Normalize severity
severity = severity.lower()
# Stop with error on a bad severity level
if severity not in severity_levels:
raise ValueError("Invalid severity")
'critical' in Issue.severity_levels # True
'new' in Issue.severity_levels # False
Issue.severity_levels.info # 'info'
Issue.severity_levels[0] # 'critical'
附錄
從“值”中獲取“鍵”有點復雜:
# using a list comprehension (I think this works in 2.6)
[k for k, v in Issue.severity_levels._asdict().items() if v == 'error']
# using a for loop
for k, v in Issue.severity_levels._asdict().items():
if v == 'error':
print(k)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454578.html
