파이썬 클래스에서 정의되지 않은 메서드 또는 특성 호출을 처리하고 싶습니다. method가없는 경우 어떤 작업을 수행해야합니다. 여기 예제에서는 몇 가지 메소드와 호출을 작성했습니다.정의되지 않은 메서드에 액세스
클래스에서 호출이 정의되어 있지 않으면 __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": "[email protected]"}
obj = C(data)
print obj.get_name() # <-- John Doe
print obj.f_name # <-- John
print obj.l_name # <-- Doe
print obj.email # <-- [email protected]
print obj.name # <-- this should execute obj.get_name()
이유를 설명 할 수 있습니까? 나는 이것이 [XY 문제] (https://meta.stackexchange.com/a/66378/344593)라고 의심한다. – TemporalWolf
나는 그렇게하기에는 너무 많은 마법이 있다고 생각한다. 당신이 원하는 것을 설명해 주시겠습니까? 대체 솔루션이있을 수도 있습니다. – nir0s
실제로 해결해야 할 문제는 없습니다. 나는 그것이 가능한지 알고 싶었습니다. 통화 시간 중에 방법의 존재를 확인했다면 가능할 것입니다. 그러나이 코드 설정으로 나는 그렇게 할 수 없었다. 그래서 여기에 질문을했습니다. 내 질문은 여전히 가능합니까? –