gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:06 25 4
gpt4 key购买 nike

我正在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com