Я подумав, що одним із наріжних каменів ООП є те, що у нас є об'єкти, які є предметами, з якими ми зацікавлені мати справу, а потім ми надсилаємо їм повідомлення.
Тож може здатися природним, що у мене є колекція елементів, і мені потрібно скласти їх в один рядок, щоб це зробити:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk робить це так само). Це " | "
певним чином розглядається як аргумент, один знак того, як до нього приєднатися. Це може бути " "
занадто, якщо ігрова дошка буде простішою. Таким чином, елемент, що приєднується " | "
, не особливо те, що нас цікавить - це не головні об'єкти програми, які мають особливе значення чи значення.
Якщо Python робить це за допомогою
" | ".join(["x", "o", "o"])
Дуже дивно, що майже відчуваєш, що ми передаємо аргумент, щоб розповісти аргумент про щось. Можливо, Python є більш процедурним? Щоб сказати приєднувальному рядку виконувати якийсь обов'язок перед нами?
Чи потрібно зберегти реалізацію, щоб нам не довелося визначати join
клас для кожного класу колекції? Але чи не правда, що ми також можемо просто один раз написати для будь-якого класу колекції, наприклад у Ruby:
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 або будь-якого класу колекції, який ми маємо.
Або Python праворуч не йде маршрутом OOP? Він використовує, len("abc")
а type([])
замість "abc".len()
або [].type()
навіть у Python3 теж здається. Чи робить Python таким чином з дизайнерської причини?
Maybe Python is more procedural?
Python був процедурною мовою з кількома функціональними доповненнями ("Python придбав лямбда, зменшити (), фільтр () та карту (), люб'язно з хакера Lisp, який пропустив їх та подав робочі патчі") до тих пір, поки, здається, десь у версії 2. Це минуло близько півтора десятиліття після того, як над ним вперше працювали.