모든 기본 클래스에서 동일한 메서드를 호출 할 수 없습니다.

Dan Seemed

내 클래스의 모든 믹스 인에 대해 동일한 메서드를 호출하고 싶습니다. 다음은 두 가지 변형입니다.

class MixinA(object):
    def get_id(self):
        return "A"


class MixinB(object):
    def get_id(self):
        return "B"


class Base(object):
    def get_id(self):
        for base_class in inspect.getmro(self.__class__):
            return ",".join(base_class.get_id())


class Instance(MixinA, MixinB, Base):
    pass


class MyTestCase(unittest.TestCase):
    def test_multiple_mixin_methods(self):
        """
        Sadly, we cannot call all mixin methods.
        :return:
        """

        ids = set(Instance().get_id())
        print(ids)
        assert ids == {"A", "B"}

슬프게도 이것은 실패합니다. 나는 'A'만 돌려받습니다. 'A'와 'B'가 포함 된 목록을 원합니다. 순서는 중요하지 않습니다.

내가 여기서 뭘 잘못하고 있니?

많은 감사

이단 하임 샬롬

필요한 것은 슈퍼에 전화하는 것입니다. super는 MRO에서 다음 메서드를 호출하므로 A => B를 호출합니다. Base 클래스는 필요하지 않습니다.

class MixinA(object):
    def get_id(self):
        return "A", super(MixinA, self).get_id()


class MixinB(object):
    def get_id(self):
        return "B"


class Instance(MixinA, MixinB):
    pass

우선은 Instance().get_id()할 수 호출 A.get_id()후 슈퍼에 대한 호출이 B 인 MRO의 다음 메소드를 호출

최신 정보

class MixinA(object):
    def get_id(self):
        return "A"


class MixinB(object):
    def get_id(self):
        return "B"


class Base(object):
    def get_id(self):
       return set([base_class.get_id(self) for base_class in inspect.getmro(self.__class__)[2:-1]])


class Instance(Base, MixinA, MixinB):
    pass

믹스 인이 독립적이기 전과는 다릅니다. 이 예에서는 Base 클래스가 The MRO에서 첫 번째가되어야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

모든 기본 인수가있는 명시 적 생성자는 동일한 클래스의 다른 생성자에서 호출 할 수 없습니다.

분류에서Dev

C ++에서는 기본 클래스에서 공용 메서드를 호출 할 수 없습니다.

분류에서Dev

자바 스크립트에서 기본 창 개체의 하위 클래스에 대한 메서드를 호출 할 수 없습니다.

분류에서Dev

SQLiteOpenHelper 클래스의 동기화 된 getinstance 메서드를 저장소 클래스에서 호출 할 수 없습니다 (해결할 수 없음).

분류에서Dev

클래스의 모든 일반 속성에 대해 메서드를 호출 할 수 있습니까?

분류에서Dev

기본 클래스 개체에 대한 파생 클래스 포인터는 파생 클래스의 메서드를 어떻게 호출 할 수 있습니까?

분류에서Dev

기본 클래스 개체에 대한 파생 클래스 포인터는 파생 클래스의 메서드를 어떻게 호출 할 수 있습니까?

분류에서Dev

PyQt4가 QThread 클래스에서 기본 Gui 클래스의 함수를 호출 할 수 없습니다.

분류에서Dev

기본 클래스 목록에 파생 클래스를 추가 한 다음 C #의 기본 클래스 목록에서 Derived 클래스의 메서드를 호출 할 수 있습니까?

분류에서Dev

다른 Form의 모든 메서드를 호출 할 수 없습니다.

분류에서Dev

angular2의 Component.html에서 모델 클래스의 메서드를 호출 할 수 없습니다.

분류에서Dev

기본 클래스 참조로 파생 클래스 메서드를 호출 할 수 없을 때 동적 다형성이 어떻게 유용한가요?

분류에서Dev

Flutter는 다른 클래스에서 비동기 함수를 호출 할 수 없습니다.

분류에서Dev

모든 클래스 메서드가 동일한 함수를 호출하도록 만들기

분류에서Dev

기본 활동 Java 클래스에서 기호를 해결할 수 없습니다.

분류에서Dev

클래스 내에서 정적 메서드를 호출 할 수 없습니다.

분류에서Dev

Java의 클래스에서 void 메서드를 호출 할 수 없습니다.

분류에서Dev

클래스에서 보호 된 최종 동기화 메서드에 액세스 할 수 없습니다.

분류에서Dev

Ruby 하위 클래스가 부모 메서드를 상속하지 않거나 클래스 본문에서 부모 메서드를 호출 할 수 없습니다.

분류에서Dev

클래스에 정의 된 메서드를 호출 할 수 없습니다.

분류에서Dev

기본 메서드에서 배열을 호출 할 수 없습니다.

분류에서Dev

C ++의 파생 클래스에서 기본 클래스 메서드를 오버로드 할 수 없습니다.

분류에서Dev

다른 클래스 내에서 클래스 메서드를 호출 할 수 없습니다.

분류에서Dev

오류 : 초기화 전에 자동 완성에서 메서드를 호출 할 수 없습니다. 'destroy'메소드를 호출하려고했습니다.

분류에서Dev

내 테스트 케이스를 실행하기 위해 다른 파일의 메서드를 기본 프로젝트 파일로 호출 할 수 없습니다.

분류에서Dev

HTML에서 Javascript 클래스를 호출 할 수 없습니다.

분류에서Dev

HTML에서 Javascript 클래스를 호출 할 수 없습니다.

분류에서Dev

다른 클래스의 메서드를 호출 할 수 없습니다.

분류에서Dev

반환을 사용하여 다중 호출에 대한 메서드를 모의 할 수 없습니다.

Related 관련 기사

  1. 1

    모든 기본 인수가있는 명시 적 생성자는 동일한 클래스의 다른 생성자에서 호출 할 수 없습니다.

  2. 2

    C ++에서는 기본 클래스에서 공용 메서드를 호출 할 수 없습니다.

  3. 3

    자바 스크립트에서 기본 창 개체의 하위 클래스에 대한 메서드를 호출 할 수 없습니다.

  4. 4

    SQLiteOpenHelper 클래스의 동기화 된 getinstance 메서드를 저장소 클래스에서 호출 할 수 없습니다 (해결할 수 없음).

  5. 5

    클래스의 모든 일반 속성에 대해 메서드를 호출 할 수 있습니까?

  6. 6

    기본 클래스 개체에 대한 파생 클래스 포인터는 파생 클래스의 메서드를 어떻게 호출 할 수 있습니까?

  7. 7

    기본 클래스 개체에 대한 파생 클래스 포인터는 파생 클래스의 메서드를 어떻게 호출 할 수 있습니까?

  8. 8

    PyQt4가 QThread 클래스에서 기본 Gui 클래스의 함수를 호출 할 수 없습니다.

  9. 9

    기본 클래스 목록에 파생 클래스를 추가 한 다음 C #의 기본 클래스 목록에서 Derived 클래스의 메서드를 호출 할 수 있습니까?

  10. 10

    다른 Form의 모든 메서드를 호출 할 수 없습니다.

  11. 11

    angular2의 Component.html에서 모델 클래스의 메서드를 호출 할 수 없습니다.

  12. 12

    기본 클래스 참조로 파생 클래스 메서드를 호출 할 수 없을 때 동적 다형성이 어떻게 유용한가요?

  13. 13

    Flutter는 다른 클래스에서 비동기 함수를 호출 할 수 없습니다.

  14. 14

    모든 클래스 메서드가 동일한 함수를 호출하도록 만들기

  15. 15

    기본 활동 Java 클래스에서 기호를 해결할 수 없습니다.

  16. 16

    클래스 내에서 정적 메서드를 호출 할 수 없습니다.

  17. 17

    Java의 클래스에서 void 메서드를 호출 할 수 없습니다.

  18. 18

    클래스에서 보호 된 최종 동기화 메서드에 액세스 할 수 없습니다.

  19. 19

    Ruby 하위 클래스가 부모 메서드를 상속하지 않거나 클래스 본문에서 부모 메서드를 호출 할 수 없습니다.

  20. 20

    클래스에 정의 된 메서드를 호출 할 수 없습니다.

  21. 21

    기본 메서드에서 배열을 호출 할 수 없습니다.

  22. 22

    C ++의 파생 클래스에서 기본 클래스 메서드를 오버로드 할 수 없습니다.

  23. 23

    다른 클래스 내에서 클래스 메서드를 호출 할 수 없습니다.

  24. 24

    오류 : 초기화 전에 자동 완성에서 메서드를 호출 할 수 없습니다. 'destroy'메소드를 호출하려고했습니다.

  25. 25

    내 테스트 케이스를 실행하기 위해 다른 파일의 메서드를 기본 프로젝트 파일로 호출 할 수 없습니다.

  26. 26

    HTML에서 Javascript 클래스를 호출 할 수 없습니다.

  27. 27

    HTML에서 Javascript 클래스를 호출 할 수 없습니다.

  28. 28

    다른 클래스의 메서드를 호출 할 수 없습니다.

  29. 29

    반환을 사용하여 다중 호출에 대한 메서드를 모의 할 수 없습니다.

뜨겁다태그

보관