我想对Python类中的未定义方法或属性调用进行一些处理。如果不存在方法,则需要执行某些任务。在示例中,我写了一些方法和一些电话。
我要实现的是,如果在类中未定义任何调用,则将其转到__getattr__
,并且我想检查是否存在使用" get_ {the_called_method_or_attribute}"的方法。如果存在,请调用该方法并返回其值。
我尝试使用 dir
, self__dict__
等,但无效。它只是在递归中自称。
是否有任何方法可以通过不检查呼叫部分中的方法或属性而不是在类内部执行我的查询?
class C:
def __init__(self, data):
self.data = data
def get_name(self):
return "{f_name} {l_name}".format(**self.data)
def get_f_name(self):
return data.get("f_name")
def get_l_name(self):
return data.get("l_name")
def get_email(self):
return data.get("email")
def access_undefined_methods(self, key):
return self.data.get(key, "Key '{}' does not present".format(key))
def __getattr__(self, name):
return self.access_undefined_methods(name)
data = {"f_name": "John", "l_name": "Doe", "email": "john@doe.com"}
obj = C(data)
print obj.get_name() # <-- John Doe
print obj.f_name # <-- John
print obj.l_name # <-- Doe
print obj.email # <-- john@doe.com
print obj.name # <-- this should execute obj.get_name()
您可以通过使用dir()
函数来获取对象方法的字典来检查get_XXX
方法是否存在。
def access_undefined_methods(self, name):
if 'get_' + name in dir(self):
return dir(self)['get_' + name'])(self)
else:
return "Key '{}' does not present".format(key)