이것은 당황 스럽지만 확실한 답을 얻을 수 없습니다. DJango 모델에서 파생 된 클래스 내에서 __new__
메서드 (또는보다 정확하게는 정적 메서드)를 사용합니다. 위의 클래스로 작동에서Django의 모델에서 파생 된 클래스에 __new__을 사용하면 작동하지 않습니다.
class A(object):
def __new__(self, *args, **kwargs):
print ("This is A's new function")
return super(A, self).__new__(self, *args, **kwargs)
def __init__(self):
print ("This is A's init function")
객체를 인스턴스화 :
이것은 __new__
이상적 (우리가 장고를 사용하고 있기 때문에, 우리는 파이썬의 버전 2.x를 가정 할 수 있습니다 사용되는) 사용하는 방법입니다 예상했다. 이제, 하나의 장고 모델에서 파생 된 클래스에 이런 일을하려고 할 때, 예상치 못한 일이 발생합니다
class Test(models.Model):
def __new__(self, *args, **kwargs):
return super(Test, self).__new__(self, *args, **kwargs)
이 오류 위의 클래스 결과에서 개체를 인스턴스화 : TypeError: unbound method __new__() must be called with Test instance as first argument (got ModelBase instance instead)
은.
왜 이런 일이 일어나는 지 이해할 수 없습니다. (장고 프레임 워크로 인해 몇 가지 클래스 마술이 일어나고 있습니다.)
답변을 보내 주시면 감사하겠습니다.
우선, 코드를 정리해야합니다. 마지막 스 니펫에서 '테스트'또는 '테스트'여야합니까? 또한 들여 쓰기가 꺼져 있습니다. – Marcin
예, return super (test, self) ...는'return super (Test, sefl) ... '여야합니다. – Furbeenator
안녕하세요 - 죄송합니다. 필자는 편집기에서 예제를 정말 빨리 타이핑했습니다. (필자는 코드를 복사하고 붙여 넣지 않았습니다.) - 잘못된 것에 대해 사과드립니다. 위의 두 가지 설명을 고려하더라도 여전히 작동하지 않습니다. BTW : 위의 코드 조각을 수정했습니다. –