簡體   English   中英

在 python 中定義一組(可能是分層的)常量的最佳方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM