【发布时间】:2013-04-09 04:51:36
【问题描述】:
hasattr(obj, attribute) 用于检查一个对象是否具有指定的属性,但是给定一个属性是否有办法知道它在哪里(全部)定义?
假设我的代码将属性(或类方法)的名称作为字符串获取,我想调用 classname.attribute 但我没有类名。
我想到的一个解决方案是这样的
def finder(attr):
for obj in globals():
try:
if globals()[obj].__dict__[attr]:
return(globals()[obj])
except:
...
用法:
class Lime(object):
@classmethod
def lfunc(self):
print('Classic')
getattr(finder('lfunc'),'lfunc')() #Runs lfunc method of Lime class
我很确定这不是最好的(甚至是正确的方法)。有人可以提供更好的方法吗?
【问题讨论】:
-
情况似乎很糟糕。
-
您为什么需要这样做?对于您要查找的函数,它们是否始终是在同一模块中定义的类的类方法?
-
这不是
hasattr()的逆。反过来是not hasattr(obj, attr)。这只是一个等待被抛弃和重新思考的架构。你想解决什么问题? -
如果你能告诉我们你想通过这个实现的具体目标会更有用,因为你的想法是代码异味的明显标志,你可能会遗漏一些明显的东西。
-
质疑投票者:问题详细说明了不应发生的代码情况这一事实不应使问题贬值 - 解释为什么这不是最好(甚至不是合理)的方式解决手头的问题应该来自 cmets 和答案。这个问题是很好定义和公式化的。如果对其他人没有用处,请不要点赞。
标签: python