我正在 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.givenName
和 user.dn 引用属性
,因为这些是 __slots__
中的字符串值。
如果您想实际将属性引用为user.ATTR_GIVEN_NAME
,那么它应该是__slots__
数组中的值。然后,您可以添加映射例程,以便在对对象执行 LDAP 操作时将对象属性转换为 LDAP 字段。
引用不在 __slots__
中的属性将生成错误,因此会在运行时捕获拼写错误。
关于python - 在 Python 中使用槽和 "constants",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631946/