class Dog(object):
def __init__(self):
self.type = 'corgi'
self.barked = False
def __bark(self):
print('__woof')
self.barked = True
def _bark(self):
print('_woof')
self.barked = True
def call_method(self, method_name):
method = getattr(self, method_name)()
d = Dog()
d.call_method('_bark') # this works
d.call_method('__bark') # this raise an AttributeError
我有一个狗类,我想用getattr在self下动态查找方法 当我试图找到具有两个下划线的类的方法名称时失败但是如果我使用一个下划线则它有效。 为什么getattr看不到双下划线方法?
答案 0 :(得分:0)
双下划线方法的名称在这里被修改: What is the meaning of a single- and a double-underscore before an object name?
如果您需要使用getattr访问您的方法,请使它们没有前导下划线或一个下划线。