我正在尝试使用syslog登录。我有一个带有设施的字符串。在这种情况下"LOG_LOCAL0"
。我想使用这个字符串来访问syslog.LOG_LOCAL0
,这是一个值为128的int。如果这是一个函数,我会使用getattr()
,但我不知道如何做一些不可调用的东西像一个int,我该怎么办?
基本上我想调用syslog.LOG_LOCAL0
但是"LOG_LOCAL0"
作为字符串,所以我不能。
答案 0 :(得分:1)
如果你想设置一个你想要的值setattr(object, name, value)
(请注意,没有下划线btw)。所以你可以这样做:
setattr(syslog, "LOG_LOCAL0", "The log value")
如果您想使用该值,则getattr
仍然合适
getattr(syslog, "LOG_LOCAL0") # syslog.LOG_LOCAL0 for all intents and purposes
答案 1 :(得分:1)
您可以使用__dict__
它返回类中所有functions
和variables
的字典,然后使用您想要获取的变量作为键,以获取其值。< / p>
示例 -
>>> class CA:
... i = 15
... def hello(self):
... print("Hello")
...
>>> CA.__dict__
mappingproxy({'__dict__': <attribute '__dict__' of 'CA' objects>, '
>>> CA.__dict__['i']
15
在你的情况下可能 -
syslog.__dict__['LOG_LOCAL0']
虽然来自here -
的脚注除了一件事。模块对象有一个名为 dict 的秘密只读属性,它返回用于实现模块命名空间的字典;名称 dict 是属性,但不是全局名称。显然,使用它会违反命名空间实现的抽象,并且应该仅限于事后调试器等。