python - 在 Python 中使用槽和 "constants"

标签 python

我正在 python 中处理一些 LDAP 数据(我不太擅长 Python),并尝试组织一个类对象来保存 LDAP 变量。由于它是 LDAP 数据,因此最终结果将是在可迭代列表中收集相同数据结构(每个用户)的许多副本。

我从 __slots__ 的硬编码属性名称开始,这似乎有效,但随着事情的进展,我意识到这些 LDAP 属性应该是某种不可变的常量,以最大限度地减少硬编码文本/打字错误。我将变量分配给 __slot__ 属性,但这似乎不是一个可行的计划:

AttributeError:“LDAP_USER”对象没有属性“ATTR_GIVEN_NAME”

现在我想了一下,我实际上并没有使用 ATTR_ 定义创建不可变“常量”,因此理论上这些值可以在运行时更改。我明白为什么 Python 的这种设计可能存在问题。

有什么更好的方法可以减少代码中硬编码文本的使用,同时维护可以实例化的类对象?

ATTR_DN                    = 'dn'
ATTR_GIVEN_NAME            = 'givenName'
ATTR_SN                    = 'sn'
ATTR_EMP_TYPE              = 'employeeType'

class LDAP_USER (object):
   __slots__ = ATTR_GIVEN_NAME, ATTR_DN, ATTR_SN, ATTR_EMP_TYPE

user = LDAP_USER()

user.ATTR_GIVEN_NAME = "milton"
user.ATTR_SN         = "waddams"
user.ATTR_EMP_TYPE   = "collating"

print ("user is " + user.ATTR_GIVEN_NAME)

最佳答案

__slots__ 定义为 [ATTR_GIVEN_NAME, ATTR_DN] 时,应使用 user.givenNameuser.dn 引用属性,因为这些是 __slots__ 中的字符串值。

如果您想实际将属性引用为user.ATTR_GIVEN_NAME,那么它应该是__slots__ 数组中的值。然后,您可以添加映射例程,以便在对对象执行 LDAP 操作时将对象属性转换为 LDAP 字段。

引用不在 __slots__ 中的属性将生成错误,因此会在运行时捕获拼写错误。

关于python - 在 Python 中使用槽和 "constants",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631946/

相关文章:

python - 哪个是处理 ImportError - 引发错误或导入链的更好方法?

python - 使用组合委托(delegate)对 QTableView 进行排序会删除除双击之外的委托(delegate)

c++ - 使用 Boost::Python 用参数包装纯虚拟方法

python - Tensorflow 中类似 zip 的函数? Tensorflow张量运算

python - 是否可以在 Xcode 或等效程序中创建基于 Python 的应用程序?

python - 根据列表查找 pandas 列子集中任何匹配值的更快方法

python - 使用 nltk 训练我自己的分类器后,如何将其加载到 textblob 中?

python - Flask-RESTful 我们可以在资源中 get 和 post 之前调用一个方法吗?

python - PyQtgraph y轴标签非科学计数法

python - 第一次调用后销毁对象方法