假设我必须定义一组常量,例如
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)来递归访问
此自定义类解决方案的问题在于这些属性实际上不是常量。也许我并不是真的需要它们...但是如果您知道如何通过使用几乎相同的代码定义量直接访问它们(而不使用Enum的.value())来使它们恒定,则可能是理想的解决方案
答案 0 :(得分:0)
您似乎可以伸手去拿enumeration:
from enum import Enum
class Formats(Enum):
IMAGE = "..."
MASK = "..."
OBJECT = "..."
class Folders(Enum):
IMAGE = "..."
MASKS = "..."
OBJECTS = "..."