从类方法python getattr,为什么不找到其他类方法?

时间:2017-12-05 04:59:52

标签: python-3.x

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看不到双下划线方法?

1 个答案:

答案 0 :(得分:0)

双下划线方法的名称在这里被修改: What is the meaning of a single- and a double-underscore before an object name?

如果您需要使用getattr访问您的方法,请使它们没有前导下划线或一个下划线。