2016-07-16 1 views
1

저는 파이썬을 배우기 시작했습니다. 파이썬의 데이터 유형에 대해서는 약간 혼란 스럽습니다. 다시이 줄을 읽고 다시파이썬에서 int ('123') - 함수 호출 또는 'int'클래스의 생성자 호출입니까?

이 .:하고 '모든이의 객체 인 파이썬'

이, 정수를 포함, 문자열, 세트, ​​목록 등 수레 우리는 다음과 같이 쓸 때 : [1, 2, 3], 그래서 우리는 실제로 list 클래스의 객체를 생성하고 있습니까? 그래서 우리가 123과 같은 정수를 쓸 때 그것은 int 클래스의 객체라는 것을 의미합니까? 그러나 책을 읽을 때 문자열을 정수로 변환하려면 int 메서드를 사용해야한다고 말합니다.

하지만 내가 생각하는 것은 int도 생성자에서 문자열 개체를 받아 들인 다음 정수 개체를 가져 오는 클래스입니다.

그래서 int은 Python의 메소드 또는 클래스입니까?

+0

파이썬 인터프리터에서'help (int)'를 사용해보십시오. 그것은 수업입니다. – smarx

+0

감사합니다 smarx, 나는 이해했다 :) 나는 초심자이고 다른 - 2 개의 용어는 나를 혼란시켰다 : –

+0

sidenote :'1',' "x"'등은 리터럴이다. –

답변

2

파이썬 documentation에서 읽을 수 있습니다.

클래스 int (x, base = 10) 숫자 또는 문자열 x로 구성된 정수 객체를 반환하거나 인수가 제공되지 않은 경우 0을 반환합니다. x가 인 경우 일반 정수, 긴 정수 또는 부동 소수점 숫자 일 수 있습니다. x가 부동 소수점이면 변환이 0으로 잘립니다. 인수가 정수 범위 밖에있는 경우이 함수는 긴 개체를 대신 반환합니다.

그래서 주어진 입력 x에 따라 int 객체를 생성하는 클래스 생성자입니다. 예 int

+0

감사합니다 DJanssens :), 그래서 우리가 실제로 데이터 형식을 만들 때 literls 우리는 클래스의 객체를 만들고 있습니까? 예 : - x = [] 그래서 x는 목록 클래스 객체입니까? right, similer를 다른 데이터 유형에 포함시켜야합니다. x.index ('aa')? –

+0

그래, @vikram, 일부 개체는 종종 그것을 위해 리터럴을 만들었습니다 만들어집니다. 이 때문에 x = 3을 할 수 있습니다. 그러면 커버 아래에 int 객체가 생성됩니다. 같은 목록 및 다른 파이썬 유형갑니다. – DJanssens

3

클래스 (그리고 그것은 또한 유형이라고; Python : terminology 'class' VS 'type' 참조) 및 int('123')을하는 것은 int 개체의 인스턴스를 반환합니다.

그러나 작은 정수 (범위 -5에서 256까지 포함)에 대해 (표준 Python 일명 CPython에서) int 생성자는 실제로 새 정수 객체를 작성하지 않습니다. 효율성을 위해 인터프리터는 작은 정수의 캐시를 가지며 생성자는 단순히 기존의 int 객체에 대한 참조를 반환합니다. 이 주제는 “is” operator behaves unexpectedly with integers에 대한 응답에서 설명합니다.

int() "int 메쏘드"라고하는 귀하의 책은 아주 조금 엉성합니다. Pedantically 말하자면, int 그 자체가 호출 가능한 객체 인 클래스이고, 클래스를 호출하면 호출은 자동으로 클래스의 생성자 메소드에 대한 호출로 변환됩니다. 그러나 비공식적으로 함수 호출이나 메소드 호출로 int()을 참조하는 것이 일반적입니다.

첫 번째 단락에서 질문을 거의 잊었습니다. 우리가

[1, 2, 3] 

을 쓸 때 인터프리터는 3 개 int 객체를 생성하고 신선한 list 예를 내부에 넣습니다.우리가 "그냥"아직도 list 완전히 본격적인이다 리터럴 목록을 만들더라도

from dis import dis 
dis('a=[1,2,3]')  

출력

1   0 LOAD_CONST    0 (1) 
       3 LOAD_CONST    1 (2) 
       6 LOAD_CONST    2 (3) 
       9 BUILD_LIST    3 
      12 STORE_NAME    0 (a) 
      15 LOAD_CONST    3 (None) 
      18 RETURN_VALUE 

를 따라서 :이 작업을위한 바이트 코드를 분해 할 수 dis module 표준을 사용하여 인스턴스 개체. 일부 OOP 언어와 달리 Python에는 객체가 아닌 "원시"데이터 유형이 없으므로 리터럴 정수와 리터럴 문자열도 객체입니다. 따라서 리터럴 문자열에는 모든 표준 문자열 메서드가 제공됩니다. 예,

print('hello'.lower) 

출력

built-in method lower of str object at 0xb72e7880> 

는 리터럴 문자열 'hello' 표준 lower() 방법을 가지고 있음을 보여줍니다.

+0

감사합니다 PM 2Ring, 유용한 정보 :) –

+0

@vikram 저는 약간 대답을 확장했습니다. 나는 그것을 좋아하면 좋겠. :) –

+0

감사합니다 :) 유용했습니다. –