从字符串中获取函数属性的值

时间:2015-07-03 14:27:47

标签: python

我正在尝试使用syslog登录。我有一个带有设施的字符串。在这种情况下"LOG_LOCAL0"。我想使用这个字符串来访问syslog.LOG_LOCAL0,这是一个值为128的int。如果这是一个函数,我会使用getattr(),但我不知道如何做一些不可调用的东西像一个int,我该怎么办?

基本上我想调用syslog.LOG_LOCAL0但是"LOG_LOCAL0"作为字符串,所以我不能。

2 个答案:

答案 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__它返回类中所有functionsvariables的字典,然后使用您想要获取的变量作为键,以获取其值。< / 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 是属性,但不是全局名称。显然,使用它会违反命名空间实现的抽象,并且应该仅限于事后调试器等。