[python] bool이 int의 하위 클래스 인 이유는 무엇입니까?

python-memcached를 통해 memcached에 bool을 저장할 때 정수로 반환되는 것을 알았습니다. 라이브러리의 코드를 isinstance(val, int)확인한 결과 값을 정수로 표시하기 위해 확인되는 위치 가 있음을 알 수 있습니다.

그래서 파이썬 셸에서 테스트했고 다음을 발견했습니다.

>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True

그러나 정확히 왜 bool하위 클래스 int입니까?

부울은 기본적으로 두 개의 값만 취할 수있는 int이지만 실제 정수보다 훨씬 적은 연산 / 공간이 필요하기 때문에 이해가됩니다 (산술이 필요없고 저장 공간의 단일 비트 만) ….



답변

http://www.peterbe.com/plog/bool-is-int에 대한 의견에서

bool 유형이 파이썬에 추가되었을 때 (때로는 2.2 또는 2.3 정도) 주변에 있었다면 완벽하게 논리적입니다.

실제 bool 유형이 도입되기 전에는 0과 1이 C89와 유사한 진리 값에 대한 공식적인 표현이었습니다. 비 이상적이지만 작동하는 코드를 불필요하게 깨뜨리는 것을 방지하기 위해 새로운 bool 유형은 0과 1처럼 작동해야했습니다. 이것은 단순한 진리 값을 넘어서 모든 적분 연산입니다. 아무도 숫자 컨텍스트에서 부울 결과를 사용하는 것을 권장하지 않으며, 대부분의 사람들은 진리 값을 결정하기 위해 평등 테스트를 권장하지 않으며, 기존 코드가 얼마나 많은지 어려운 방법을 찾고 싶어하지 않았습니다. 따라서 True와 False를 각각 1과 0으로 가장하기로 한 결정입니다. 이것은 언어 진화의 역사적 유물 일뿐입니다.

이 멋진 설명에 대한 크레딧은 dman13에 있습니다.


답변

PEP 285-bool 유형 추가를 참조하십시오 . 방출 통로 :

6) bool은 int에서 상속해야합니까?

=> 예.

이상적인 세계에서 bool은 혼합 모드 산술을 수행하는 방법을 알고있는 별도의 정수 유형으로 더 잘 구현 될 수 있습니다. 그러나 int에서 bool을 상속하면 구현이 상당히 쉬워집니다 (부분적으로는 PyInt_Check ()를 호출하는 모든 C 코드가 계속 작동하므로 int의 하위 클래스에 대해 true를 반환합니다).


답변

콘솔에서의 값 help을 확인하는 데 사용할 수도 있습니다 Bool.

help (True)

help(True)
Help on bool object:
class bool(int)
 |  bool(x) -> bool
 |
 |  Returns True when the argument x is true, False otherwise.
 |  The builtins True and False are the only two instances of the class bool.
 |  The class bool is a subclass of the class int, and cannot be subclassed.
 |
 |  Method resolution order:
 |      bool
 |      int
 |      object
 |

help (거짓)

help(False)
Help on bool object:
class bool(int)
 |  bool(x) -> bool
 |
 |  Returns True when the argument x is true, False otherwise.
 |  The builtins True and False are the only two instances of the class bool.
 |  The class bool is a subclass of the class int, and cannot be subclassed.
 |
 |  Method resolution order:
 |      bool
 |      int
 |      object


답변