python - 轻松访问静态类 python 的属性
问题描述
我在下面定义了一个静态类,它有两个我将在我的代码中引用的默认属性的示例。这个类稍后会更大,但我想要一种将所有这些值保存在一个地方的好方法,并在多个代码区域中访问它们。
'''
class Defaults:
Refractive: Tuple[float, float, float] = (0.5, 1.333, 5.0)
Temp: Tuple[int, int, int] = (10, 23, 40)
@staticmethod
def Min(property: Tuple[Any, Any, Any]) -> Any:
return property[0]
@staticmethod
def Max(property: Tuple[Any, Any, Any]) -> Any:
return property[2]
@staticmethod
def Default(property: Tuple[Any, Any, Any]) -> Any:
return property[1]
'''
有没有办法访问这些属性的特定索引,例如:
Defaults.Temp.Min()
而不是这个:
Defaults.Min(Defaults.Temp)
或者这里有更好的数据结构吗?谢谢。
解决方案
我不会为此使用一个类,并且将其作为一种方法真的没有意义。使用另一个对象而不是静态方法:
from typing import NamedTuple, Generic, TypeVar
T = TypeVar("T", int, float)
# it doesn't have to be a namedtuple, either, you could just define a regular class
class MetaData(NamedTuple, Generic[T]): # or a better name
min: T
default: T
max: T
class Defaults:
Refractive: MetaData[float] = MetaData(0.5, 1.333, 5.0)
Temp: MetaData[int] = MetaData(10, 23, 40)
然后,你可以这样做:
print(Defaults.Temp.min)
注意,你应该避免Any
,它几乎违背了打字的目的!它的基本意思是“不要输入检查这个”。它充当“逃生阀”。
请注意,Python 不是 Java/C#……确实不需要“静态类”,事实上,这不是标准术语。通常,这只是一个具有全局级别“常量”的常规模块,例如
# in defaults.py
Refractive: MetaData[float] = MetaData(0.5, 1.333, 5.0)
Temp: MetaData[int] = MetaData(10, 23, 40)
推荐阅读
- c - 使用结构的年度学生计划
- c# - 将 FormFile 转换为流
- python-3.x - SLURM 工作。NameError:名称'python3'未定义
- django - Django:'Q'对象不可迭代
- c - Microsoft Visual C++ 2019 (C) 致命错误 C1002
- html - 为 mat-autocomplete 的 mat-option 添加样式
- reactjs - 为什么只有两层嵌套数组反映了非突变 React 状态变量的变化?
- python - 为什么链表的最后一个元素没有出现在输出中?
- c# - C# XML CefSharp 菜单处理
- linux - 了解 docker:什么是 dockerhub Ubuntu 映像?