2009-05-21 3 views
9

Ruby에서 모든 것이 객체이기 때문에 어느 시점에서는 it was said that Python is less object oriented than Ruby을 기억합니다. 이것은 파이썬을 위해서도 변경 되었습니까? 최신 파이썬은 이전 버전보다 객체 지향적입니까?파이썬이 더 많은 객체 지향으로 변경 되었습니까?

+7

파이썬에서는 모든 것이 하나의 객체입니다. 어떤 소식통을 읽었습니까? URL이나 견적을 제공 할 수 있습니까? –

+5

@ S.Lott - 그는 맞습니다. 사실 Ruby의 "About"페이지는 여전히 Ruby의 기원이라고 말했습니다.Matz는 "Perl보다 강력하고 Python보다 객체 지향적 인 스크립팅 언어를 원했습니다." http://www.ruby-lang.org/en/about/ –

+0

나는 같은 지각. 파이썬은 더 "구조화"되고 루비는 처음부터 순수한 OO가되도록 태어났습니다. 그러나 나는 이유를 말할 수 없다. – OscarRyz

답변

40

지안 린 - 대답은 "예", 파이썬은 더 객체 -입니다 Matz이 Ruby를 만들고 싶다고 결정했을 때보 다 두 언어 모두 "모든 것이 대상"이라는 특징을 가지고 있습니다. 당시 파이썬이 젊었을 때 "문자열"과 "숫자"와 같은 "유형"은 메소드가 부족한 반면 "객체"는 "클래스"구문 (또는 C 확장 모듈에 의도적으로 클래스를 작성)으로 작성되었지만 다소 효율적이지는 않지만 지원 방법 및 상속. 1990 년대 초반에, 빠른 386이 꽤 좋은 기계 였을 때,이 타협은 의미가있었습니다. 그러나 유형과 클래스는 Python 2.2 (2001 년에 릴리스 됨)에서 통일되었으며 문자열에는 메서드가 있으며 최근의 Python 버전에서는 사용자가 하위 클래스를 만들 수도 있습니다.

그래서 : 한 번에 파이썬은 분명히 객체 지향적이었습니다. 그러나, 지금까지 내가 아는 한, 그 오래된 장벽들 모두는 이제 사라졌습니다. 여기

가 발생한 통일에 대한 안내입니다 :

http://www.python.org/download/releases/2.2/descrintro/

명확한 설명 : 아마도 내가 더 간단하게 넣을 수 있습니다 : 파이썬에서, 모든 것이 항상 개체되었습니다; (OA) 프로그래밍 방법 (예 : 상속)이 사용되지 않도록하는 "다른 규칙"에 의해 한 번 수행 된 몇 가지 기본 종류의 객체 (ints, strings)입니다. 이제 해결되었습니다.다른 응답에서 설명한 len() 메서드는 아마도 Guido가 Python 3.0으로 업그레이드 할 때 바뀌 었음을 의미하는 유일한 것입니다. 그러나 적어도 그는 나에게 사전 통찰력을 주었다. 그래서 나는 너무 큰 소리로 불평하지 않을 것이다. :-)

+0

Guido는 그가 3.0에서 len() 메소드를 생략 한 이유를 제공 했습니까? –

+0

예, 어딘가에 기사가 있습니다. 기본적으로 그의 reasning은 len (my_list)가 my_list.len()보다 읽기가 더 어렵다는 것이 었습니다. – nikow

+6

@nemo, 기본적으로 그는 len (x)가 int를 돌려 주지만 x.len()은 그러한 보장이 없다고 말했습니다. 그리고 그는 원래 더 좋게 보이는 방식을 좋아했습니다. (이메일 : http://mail.python.org/pipermail/python-dev/2008-January/076575.html http://mail.python.org/pipermail/python-dev/2008-January/076612. html) – JimB

12

루비가 파이썬보다 객체 지향적이라는 주장을하는 것은 확실하지 않습니다. 객체와 도트 구문을 사용하는 것보다 객체 지향적 인면이 많습니다. 내가 파이썬에서 목록의 길이를 얻을 수 있다는 것입니다 참조 일반적인 인수는, 당신은 같은 것을 할 :

len(some_list) 

나는 bikeshed argument으로 이것을 참조하십시오. 이것이 바로 (거의 직접적으로) 다음과 같습니다 :

some_list.__len__() 

완벽하게 객체 지향적입니다. Rubyists는 일반적으로 객체 지향적이므로 도트 구문 (예 : object.method())을 사용하기 때문에 다소 혼동 스러울 수 있습니다. 그러나 Rubyists의 주장을 오해한다면, 알려 주시기 바랍니다.

이 객체 지향성에 관계없이 len을 이러한 방식으로 사용하면 장점이 있습니다. 특정 언어에 대해 항상 나를 귀찮게하는 것은 특정 객체에 some_list.size() 또는 some_list.length() 또는 some_list.len 중 어느 것을 사용할지를 기억해야한다는 것입니다. 파이썬의 방법은 단지 하나의 함수를 기억하는 것을 의미합니다.

+2

.len()을 목록에서 직접 노출하지 않는 이유는 무엇입니까? 나는 OO 설계를 구문에서 완전히 분리 할 수 ​​없다고 생각한다. 왜냐하면 구문이 코드 패러다임을 크게 정의하기 때문이다. some_list.len()은 길이가 무엇인지 알려줄 수있는 객체로 목록을 생각하기 때문에 객체 지향입니다. len (some_list)은 그것이 무엇을 의미하는지에 관계없이 OO가 아닙니다. –

+9

죄송합니다. 구문과 운영체제는 서로 관련이 없습니다. 파이썬 객체는 객체가 아닌 구문을 가질 수 있습니다. 그들은 여전히 ​​대상입니다. –

+0

+1 더 나은 답변입니다. –

2

잠깐만 기다려주세요. 루비와 파이썬은 모두 객체 지향적입니다. 객체는 객체입니다. 더 나은 것으로 인도 할 더 많은 객체 지향 '비교 함수'가 없습니다. 구문은 일부 언어를 객체 지향적 인 것으로 만드는 것뿐만 아니라 데이터 모델입니다.

개체는 데이터에 대한 파이썬의 추상화입니다. 파이썬 프로그램의 모든 데이터는 객체 또는 객체 간의 관계로 표현됩니다. (어떤 의미에서, 그리고의 폰 노이만의 모델 적합성에 "저장된 프로그램 컴퓨터,"코드도 객체로 표시됩니다.) http://docs.python.org/reference/datamodel.html

2

이것은 잘못된 생각입니다.

더 깊이있는 설명은 여기 내 이전 답변을 참조하십시오 :

Is everything an object in python like ruby?

이유는 다음 직접 목록 오프) (.LEN 노출하지? 나는 OO 설계를 구문에서 완전히 분리 할 수 ​​없다고 생각한다. 왜냐하면 구문이 코드 패러다임을 크게 정의하기 때문이다. some_list.len()은 길이가 무엇인지 알려줄 수있는 객체로 목록을 생각하기 때문에 객체 지향입니다. len (some_list)

.len()은 목록에서 직접 사용할 수 있습니다. __len __()으로 사용할 수 있습니다. len()은 함수 객체입니다. dir (len)으로 모든 메소드를 볼 수 있습니다. Guido가 __len __() 메서드를 더 길게 만드는 것을 결정한 이유는 모르겠지만 모든 메서드가 여전히 개체라는 사실은 변하지 않습니다.

+0

직접 답장을 보내 주셔서 감사합니다. 비록 __method__를 직접 호출하는 것은 파이썬에서 낙담했지만 __은 사적인 것의 축약 형이었습니다. 나는 __을 다른 것과 혼동하고 있다고 생각합니다. –

+0

Ah __method는 __method__와 구분되며 전자는 개인 (비 강화)이고 후자는 "미리 정의 된 동작이있는 특수 시스템 기능"입니다. –

7

비록 이것이 적절하게 대답하지는 않지만 ... 왜 파이썬이 더 많거나 적음에 관심이 있습니까? Python에 대한 멋진 점은 객체 지향적이거나 funcitonal이 아닌 pythonic이거나 순간적으로 유행하는 패러다임입니다. :-)

나는 자바와 객체 오리엔테이션으로 프로그래밍하는 법을 배웠다. 그러나 이제는 OOP가 모든 문제에 대한 해결책이 아니라는 것을 알기 때문에 그것에 관해서는주지 않는다. (사실, 하나의 패러다임은 없다.).

은 다음을 참조하십시오

Why was python created in the first place: :

+1

OOP 유행은 절대로 지속되지 않습니다. 30 년이 된거야? – Glenn

1

나도 같은 "인식"은 아마도 이것에서 파생 된이

ABC와 같은 구문으로 스크립트 언어는 [...] 필요

An Interview with the Creator of Ruby:

를 채울 것 "나는 스크립트 언어를 원했다는 것을 나에게 발생 Perl보다 강력하고 파이썬보다 객체 지향적입니다.

나는 그 지각이 현실과 같지 않다는 것을 안다. 파이썬과 루비는 모두 훌륭한 프로그래밍 언어이며 두 언어 모두 매우 OO입니다.

관련 문제