>  Q&A  >  본문

[Python 초보자] 객체를 한 번 초기화하는 방법에 대해 질문하세요

코드는 다음과 같습니다.

으아악

실행 결과:

내 질문:


내 생각에 따르면 이 코드에 작성한 내용은 Dog 클래스를 디자인한 다음 싱글톤 개체(첫 번째 빨간색 상자의 코드), 즉 궁극적으로 a와 b의 인스턴스를 만드는 것입니다. 실제로는 같은 것입니다.
그런 다음 이 싱글톤 개체를 설정하고 한 번만 초기화했습니다(두 번째 빨간색 상자의 코드 참조). 즉, 인스턴스 a가 생성된 후 이름이 Wangcai이고, 인스턴스 b가 생성된 후에는 다음과 같습니다. 초기화되지 않으므로 Roaring Sky Dog라는 이름을 인쇄하는 것이 불가능해야 합니다. 내 생각에 따르면 인쇄되어야 할 결과는 두 가지 번영하는 부입니다. 이제 결과가 내가 예상한 것과 다른 이유는 무엇입니까?

我想大声告诉你我想大声告诉你2669일 전631

모든 응답(1)나는 대답할 것이다

  • 阿神

    阿神2017-06-28 09:26:24

    실제로 이미 싱글톤 개체를 구현했으며 id的结果已经看出来了, 至于为什么你两次的结果会不一样呢? 因为创建返回是一回事, 初始化又是一回事, 在__new__里面, 确认了不会创建新实例, 返回的是旧实例, 但是这并不影响下一步的__init__初始化动作啊, 而且你修改的__init_flag = True只是在实例对象里面而已, 并没有修改到那边, 所以你的判断在无效的, 只有修改到那边的__init_flag부터만 유효하므로 코드는 다음과 같이 수정됩니다.

    으아악

    두 가지 추가 제안:

    1. 객체가 None인지 판단할 때 ==, 应该用is: cls.__instance is None

    2. 를 사용하지 마세요.
    3. false, 也不要用==, 应该是not: if not self.__init_flag

    4. 과 같은지 판단하세요

    회신하다
    0
  • 취소회신하다