在函数
__getattr__()
中,如果没有找到所引用的变量,就会产生一个错误。我该如何检查一个对象中是否存在某个变量或方法?import string
import logging
class Dynamo:
def __init__(self,x):
print "In Init def"
self.x=x
def __repr__(self):
print self.x
def __str__(self):
print self.x
def __int__(self):
print "In Init def"
def __getattr__(self, key):
print "In getattr"
if key == 'color':
return 'PapayaWhip'
else:
raise AttributeError
dyn = Dynamo('1')
print dyn.color
dyn.color = 'LemonChiffon'
print dyn.color
dyn.__int__()
dyn.mymethod() //How to check whether this exist or not
None
不可调用,因此您可以使用callable(getattr(Dynamo, 'mymethod', None))
。我选择了这个答案,因为我的super().mymethod()
可能会引发AttributeError
。 - sbutlerdef getattr(object, name, default=None):
。我怀疑这不准确,因为如果是这样,我希望将None作为第三个参数传递不会改变函数的行为。 - maltem-zahelp(getattr)
说:“当给出默认参数时,如果属性不存在,则返回该参数;否则,在这种情况下会引发异常。”--(实际上,您可以检查getattr是否在缺少属性时引发异常),因此很明显,无论PyCharm是什么,它都是错误的。 - ShreevatsaRgetattr
行为的讨论:https://dev59.com/3o7ea4cB1Zd3GeqPIPif - Mahdiif hasattr(self, "work") and callable(self.work)
。这会检查实例是否具有"work"属性(可能是变量或函数),然后检查它是否是可调用的(表示它是一个函数)。 - Mitch McMabers