파이썬의 객체 지향 this.method()
및 절차 적 / 기능적 method(this)
구문 조합이 매우 불안정 하다는 것을 알았습니다 .
x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)
메소드가 아닌 많은 함수가 전역 네임 스페이스에 덤프되기 때문에 특히 나쁩니다 . 목록, 문자열, 숫자, 생성자, 메타 프로그래밍과 관련된 메소드가 모두 알파벳 순서로 정렬 된 하나의 큰 목록으로 혼합되어 있기 때문 입니다.
최소한 F #과 같은 기능적 언어는 모듈에서 네임 스페이스가 올바르게 지정된 모든 기능을 갖습니다.
List.map(x)
List.reversed(x)
List.any(x)
그래서 그들은 모두 함께 있지 않습니다. 또한 이것은 라이브러리 전체에 적용되는 표준이므로 최소한 일관됩니다.
나는 함수 대 메서드 일 을하는 이유를 이해 하지만 여전히 이것을 이렇게 섞는 것은 나쁜 생각이라고 생각합니다. 적어도 일반적인 작업에서 method-syntax를 따르는 경우 훨씬 더 행복 할 것입니다.
x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()
메소드가 변경되는지 여부에 관계없이 메소드를 오브젝트의 메소드로 사용하면 몇 가지 장점이 있습니다.
- 데이터 유형에 대한 "공통"작업을 찾는 단일 장소 : 기타 라이브러리 등 데이터 유형에 대해 수행 할 수있는 다른 멋진 작업이있을 수 있지만 "기본"작업은 모두 개체의 메서드에 있습니다.
Module
전화 할 때 계속 반복 할 필요가 없습니다 Module.method(x)
. 위의 기능 목록 예제를 보았는데 왜 계속해서 말해야 List
합니까? 그것이 a라는 것을 알아야 List
하며 Navigation.map()
함수 를 호출하고 싶지 않습니다 ! x.map()
구문을 사용하면 건조하고 모호하지 않습니다.
물론 전 세계적으로 사용되는 네임 스페이스 방식 보다 장점이 있습니다. 현재의 방식으로는 불가능 하지 않다 작업을 수행 있는 것은 . len(lst)
네임 스페이스가 없기 때문에 꽤 간결합니다 ( )! 메서드보다 함수 (기본 동작 등)를 사용할 때의 이점을 이해하지만 여전히 마음에 들지 않습니다.
지저분합니다. 그리고 큰 프로젝트에서 혼란은 최악의 적입니다.