제목에 나와 있습니다. 내가하는 일에 상관없이, __getattr__
은 호출되지 않을 것입니다. 나도 예를 들어 그것을 시도했다 (어리석은, 나는 알고있다). 마치 __getattr__
이 메타 클래스에서 금지 된 것처럼.메타 클래스가 호출되지 않는 __getattr__이
이에 대한 문서에 대한 포인터를 알려 주시면 감사하겠습니다.
코드 : 속성이 존재하지 않는 경우
class PreinsertMeta(type):
def __getattribute__(self, attrname):
if attrname == "field" and isinstance(object.__getattribute__(self, attrname), basestring):
tbl, fld = object.__getattribute__(self, attrname).split(".")
self.field = (tbl, fld)
return object.__getattribute__(self, attrname)
감사합니다.'__getattribute__'도 잊어 버렸습니다. :) 그리고 위의 구현은 부모 클래스의 하위 클래스를위한 것이며,'field' 멤버는 기본 클래스 멤버를 직접 참조 할 수 없습니다. 그 당시에는 존재하지 않습니다. __getattribute__ 버전을 사용하면 사용시 해결 된 멤버 변수를 사용할 수 있습니다. 포함하거나 하위 클래스가 인스턴스화되지 않았으므로 메타 클래스를 사용하여이 작업을 시도합니다. – velis