[英]What is the best way to define a (maybe hierarchical) set of constants in python?
假設我必須定義一組常量,例如
IMAGE_FOLDER="..."
MASKS_FOLDER="..."
OBJECTS_FOLDER="..."
IMAGE_FMT="...",
MASK_FMT="...",
OBJECT_FMT="...",
FORMATS=(IMAGE_FMT, MASK_FMT, OBJECT_FMT)
...
(常見的用例是將一些字符串常量保存在一個變量中,以免通過多次鍵入“image”而出現拼寫錯誤)
定義它的最佳方法是什么(如果我有很多)。 我可以看到幾個解決方案,如types.SimpleNamespace
或創建自定義類。 但是如果我希望這些常量被遞歸分配,例如constants.folder.image
而不是constants.image_folder
有沒有比自定義類更通用的實踐或更好的解決方案?
UPD :自定義類解決方案如下所示
class Constants:
class Formats:
OBJECT = "objects_format"
MASK = "masks_format"
class Folders:
IMAGE = "images_folder"
OBJECTS = "objects_folder"
MASKS = "masks_folder"
class Extensions:
IMAGE = {".bmp", ".png", ".jpeg", ".jpg", ".tif", ".tiff"}
OBJECTS = {".xml"}
MASKS = {".bmp", ".png", ".jpeg", ".jpg", ".tif", ".tiff"}
class DatasetColumns:
ID = "ID"
IMAGE = "image"
OBJECTS = "object"
MASK = "mask"
所以“遞歸屬性”意味着我可以像 Constants.DatasetColumns.ID 一樣通過點遞歸訪問
這個自定義類解決方案的問題在於這些屬性並不是真正的常量。 也許我真的不需要它們......但是如果你知道如何使用與定義大致相同數量的代碼直接訪問(沒有枚舉的.value())使它們保持不變,它可能是理想的解決方案
看起來您可能會進行枚舉:
from enum import Enum
class Formats(Enum):
IMAGE = "..."
MASK = "..."
OBJECT = "..."
class Folders(Enum):
IMAGE = "..."
MASKS = "..."
OBJECTS = "..."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.