실행시 기존 클래스에 새 클래스를 추가하려고합니다 ("type (...)"사용). 나는 또한 새로운 클래스 '__getattr__을 재정의하여 새로운 클래스에 속하지 않은 속성에 대한 고유 한 동작을 수행 할 수 있도록하려고합니다. 예를 들어 클래스 foo가 있고, 클래스 "tool"을 추가하고 foo.tool.test 이 내 자신의 일을하고 싶습니다. 아래의 코드는 부분적으로 만 작동합니다. 명시 적으로 __getattr__을 호출하면 작동합니다 (첫 번째 인쇄 참조). 하지만 foo.tool.test를 참조하면 재정의 된 __getattr__이 호출되지 않고 attrbute 오류가 발생합니다.python - 동적으로 추가 된 클래스에 대해 __getattr__을 재정의하려하지만 일종의 작업 만
귀하의 도움에 감사드립니다.
class Foo(object):
def __init__(self):
self.NameList=[]
# add new class to ourself
self.tool = type('tool', (object,), {})
# override new class' __getattr__ with call to ourself
setattr(self.tool, "__getattr__", self.__getattr__)
# add one well known test name for now
self.NameList.append("test")
# should be called by our newly added "tool" object but is only called sometimes...
def __getattr__(self, attr):
# print("__getattr__: %s" % attr)
if(attr in self.NameList):
return(99)
raise AttributeError("--%r object has no attribute %r" % (type(self).__name__, attr))
foo = Foo()
# access tool class attribute "test" - it should be seen by the override __getattr__
# the following works...
print("foo.tool.__getattr__=%d" % foo.tool.__getattr__("test"))
# but the following does not - why is this not the same as the line above???
print("foo.tool.test=%d" % foo.tool.test)
뿐만 아니라'object'으로 사용합니다. '__getattr__'는'tool'의 인스턴스에서 정상적으로 작동합니다. 예.'foo.tool(). test' –