OOP의 초석 중 하나는 우리가 다루고 싶은 아이템 인 객체가 있고 메시지를 보낸다는 것입니다.
따라서 항목 모음이 있고 하나의 문자열에 넣어야한다는 것이 당연한 것처럼 보일 수 있습니다.
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk는 동일한 방식으로 수행합니다). 은 " | "
어떤 방법이 인수를 결합하는 방법의 토큰 하나로서 생각입니다. 그것은 할 수 있습니다 " "
게임 보드는 간단하는 경우도. 따라서 결합 요소 " | "
는 특히 우리가 관심을 갖고있는 것이 아닙니다. 특히 중요하거나 중요한 프로그램의 주요 대상은 아닙니다.
파이썬이 그것을 사용한다면
" | ".join(["x", "o", "o"])
무언가에 대해 논쟁을하기 위해 우리가 논쟁에 메시지를 전달하는 것처럼 느껴지는 것은 다소 이상하게 느껴집니다. 아마도 파이썬이 더 절차 적입니까? 결합 문자열이 우리에게 어떤 의무를 수행하도록 지시하려면?
우리가 가지고있는 join
각 컬렉션 클래스에 대해 정의 할 필요가 없도록 구현을 저장 해야합니까? 그러나 루비에서와 같이 컬렉션 클래스에 대해 한 번만 쓸 수 있다는 것은 사실이 아닙니다.
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(이와 같은 것, to_s
각 항목을 호출 하고 to_s
각 클래스 에 의존 하여 고유 한 적절한 작업을 수행하고 문자열로 변환 한 다음 연결). 따라서 우리는 각각의 String, Hash 또는 Set 또는 우리가 가진 컬렉션 클래스에 대해 구현할 필요가 없습니다.
아니면 파이썬이 OOP 경로를 따르지 않습니까? 그것은 사용 len("abc")
하고 type([])
대신 "abc".len()
또는 [].type()
심지어 Python3도 보인다에서. 파이썬은 디자인상의 이유로 이런 식으로합니까?
Maybe Python is more procedural?
파이썬은 버전에 어딘가에 나타날 때까지 몇 가지 기능적 추가 기능 ( "Python은 람다, reduce (), filter () 및 map (), Lisp 해커가이를 놓치고 작업 패치를 제출 한 예의)을 얻었습니다")을 추가 한 절차 적 언어였습니다. 2. 처음 작업 한 지 약 10 년 반이 지났습니다.