현재 클래스의 이름 얻기 + 현재 클래스의 메소드 얻기
현재 클래스의 메소드 이름 얻기
class Base 에 대해, Base.dict 라고 하면, Base에 선언된 정보를 얻을 수 있으나,
이중, 메소드 이름만 추출하고 싶다면,
from types import *
def getMethodNames():
result = []
for attr, val in Base.__dict__.items():
if type(val) == FunctionType:
result.append(attr)
return result
과 같이 함으로써, method 이름을 추출할 수 있다. 그러나, 이미 특정 class로부터 instance를 만든 경우에는 위의 방법을 그대로 사용할 수 없다. 즉, Base.getMethodNames()라고 하면 결과를 얻을 수 있지만,
aa = Base()
aa.getMethodNames()
라고 하면, 데이터를 얻을 수 없다. 따라서, aa 로부터 instance하기 전의 클래스가 무엇인지 알아내야 한다.
self.__class
라고 하면, 현재의 클래스를 리턴한다. 따라서, 위의 for 문에서 Base.__dict__items() 대신
self.__class__.__dict__items()
라고 쓰면 된다. 이때, 클래스의 이름을 self.class.name 으로 하여 확인할 수도 있는데, self.class.dict.itesm() 와 eval(self.class.name).dict.items()는
동일한 결과물을 뽑아준다.
즉, class와 eval(class의 이름)이 동일하게 취급된다는 것.
Leave a Comment