2017-11-30 1 views
0

몇 개의 스레드를 읽었으며 django가 여러 추상 클래스를 가질 수 있다는 것을 알고 있습니다. 그러나 내가 본 거의 모든 샘플은 ...부모는 같지만 자식이 다른 추상 클래스의 다중 상속은 무엇입니까? django

class AbsOne(models.Model): 
    pass 
class AbsTwo(models.Model): 
    pass 

class AbsThree(AbsOne, AbsTwo): 
    pass 

하지만 무엇 나는 ... 같은

class AbsOne(models.Model): 
    pass 

class AbsTwo(AbsOne): // this actually inheritance AbsOne 
    pass 
class AbsThree(AbsOne): // this inheritance AbsOne 
    pass 

뭔가가 있다면 제가 모두 AbsTwo, AbsThree하지만이 두 또한 유산을 상속해야하는 경우 같은 부모에게.

class AbsFour(AbsTwo, AbsThree): 
    pass 

이 필드는 충돌이나 추가 필드없이 수행 할 수 있습니까?

미리 감사드립니다. 그냥 파이썬의 하위 클래스와 같은

+0

장고 다중 모델 상속은 fubar입니다. 충분한 결정을 내리고 해킹 할 수는 있지만 많은 문제를 피하고 사용하지 마십시오. (파이썬 미시간은 아름답게 작동합니다.) – thebjorn

답변

1

, 그것은 다수의 상위 모델에서 상속 장고 모델 가능합니다. 일반적인 Python 이름 확인 규칙이 적용된다는 점을 명심하십시오. 특정 이름 (예 : 메타)이 나타나는 첫 번째 기본 클래스가 사용되는 기본 클래스입니다. 예를 들어, 은 복수의 부모가 Meta 클래스를 포함하는 경우 첫 번째 클래스는 만 사용되고 나머지는 무시된다는 것을 의미합니다.

https://docs.djangoproject.com/en/1.11/topics/db/models/#multiple-inheritance

그것은 가능하지만 장고 ORM 또는 클래스의 모델 방식 (부모 클래스와 메타 클래스에서 오버라이드 (override) 필드)와 같은과에 일부 제한이는 일반 파이썬 상속보다는 아키텍처에 조금 다르다 문서가 언급하는 것을주의 깊게 읽고 그것을 간결하게 유지하려고 노력하십시오. 믹스 인을 상속 모든 클래스에 특정 추가 필드 나 메소드를 추가 :이 유용

... 주요 사용 사례는 "혼합 된"클래스입니다. 당신은 정보의 특정 부분을 편집

어디에서 오는 을 해결하기 위해 투쟁 할 필요가 없습니다 있도록 간단하고 가능한 간단하여 상속 계층 구조를 유지하십시오 : 추가 된 또 다른 견적을 :)

관련 문제