Ключевое слово compile
устарело. Замените их словом implementation
. И обновите версии библиотек. Для этого вы можете установить курсор на любую библиотеку, нажать Alt + Enter и выбрать обновить до .... Например, измените эти библиотеки на следующие версии: ]
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
DiveIntoPython - Все является объектом
Все в Python является объектом, и почти все имеет атрибуты и методы. Все функции имеют встроенный атрибут
__ doc __
, который возвращает строку документа, определенную в исходном коде функции. Модуль sys - это объект, который имеет (среди прочего) атрибут, называемый path. И так далее.Тем не менее, здесь возникает вопрос. Что такое объект? В разных языках программирования «объект» определяется по-разному. В некоторых случаях это означает, что все объекты должны иметь атрибуты и методы; в других случаях это означает, что все объекты являются подклассами. В Python определение более расплывчатое; некоторые объекты не имеют ни атрибутов, ни методов (подробнее об этом в главе 3), и не все объекты являются подклассами (подробнее об этом в главе 5). Но все является объектом в том смысле, что его можно присвоить переменной или передать в качестве аргумента функции (подробнее об этом в главе 4).
Ruby Docs - To Ruby From Python
Как и в Python, в Ruby, ... Все является объектом
Итак, у вас есть это с собственного веб-сайта Ruby: в Python все является объектом.
Ага, насколько я знаю, в Python все является объектом. Конечно, примитивные и встроенные типы (int, long, str, float и т. Д.) Могут быть разделены на подклассы - и на самом деле сами типы являются объектами. Функции - это объекты, классы - это объекты, даже блоки кода - это в некотором смысле объекты ... Я не могу придумать в Python ничего, что нельзя было бы рассматривать как объект.
В ответ на ваш второй вопрос, да:
>>> (1).__add__(2)
3
«все» - это немного завышенная ставка как для Python, так и для Ruby - например, if
не является «объектом», скорее это ключевое слово, используемое для запускать условный оператор или (в Python) внутри списков и выражений генератора. Такой энтузиазм вызывает энтузиазм при обнаружении того, что функции, классы, методы и тому подобное, которые на самом деле не являются объектами (скажем) C ++, являются объектами в Ruby или Python. Другие вещи могут быть объектами в Ruby, но не в Python или наоборот (блоки кода, регулярные выражения, ...).
Чтобы добавить комментарий к отличным ответам других людей: все является объектом, но некоторые - особенно строки и числовые типы - неизменяемы. Это означает, что эти типы ведут себя так же, как в таких языках, как C или Java (где целые числа и т. Д. Не являются объектами) в отношении присваивания, передачи параметров и т. Д., И вам никогда не придется беспокоиться о ловушках, вызванных передачей мимо- ссылка. Довольно удачное решение: -)
Хотя в Python все является объектами, он отличается от Ruby своим подходом к разрешению имен и взаимодействию с объектами.
Например, в то время как Ruby предоставляет вам метод to_s для базовый класс Object, чтобы раскрыть эту функциональность, Python интегрирует его в сам строковый тип - вы конвертируете тип в строку, создавая из него строку. Вместо 5.to_s
у вас есть str (5)
.
Однако не дайте себя обмануть. За кулисами все еще существует метод - вот почему этот код работает:
(5).__str__()
Итак, на практике они в основном похожи, но вы используете их по-разному. Длина для последовательностей, таких как списки и кортежи в Python, - еще один пример работы этого принципа - фактическая функция построена на методах со специальными именами, но предоставляется через более простой и легкий в использовании интерфейс (функция len
).
Таким образом, python, эквивалентный тому, что вы написали в своем вопросе, будет выглядеть следующим образом:
(5).__add__(6)
Другое важное отличие - как реализованы глобальные функции. В python глобальные переменные представлены словарем (как и локальные). Это означает, что следующее:
foo(5)
эквивалентно этому в python:
globals()["foo"].__call__(5)
В то время как ruby эффективно делает это:
Object.foo(5)
Это имеет большое влияние на подход, используемый при написании кода на обоих языках. Библиотеки Ruby имеют тенденцию расти за счет добавления методов к существующим типам, таким как Object, в то время как библиотеки Python имеют тенденцию расти за счет добавления глобальных функций в данный модуль.
Таким образом, Python, эквивалентный тому, что вы написали в своем вопросе, будет выглядеть следующим образом:
(5).__add__(6)
Другое важное отличие состоит в том, как реализованы глобальные функции. В python глобальные переменные представлены словарем (как и локальные). Это означает, что следующее:
foo(5)
эквивалентно этому в python:
globals()["foo"].__call__(5)
В то время как ruby эффективно делает это:
Object.foo(5)
Это имеет большое влияние на подход, используемый при написании кода на обоих языках. Библиотеки Ruby имеют тенденцию расти за счет добавления методов к существующим типам, таким как Object, в то время как библиотеки Python имеют тенденцию расти за счет добавления глобальных функций в данный модуль.
Таким образом, Python, эквивалентный тому, что вы написали в своем вопросе, будет выглядеть следующим образом:
(5).__add__(6)
Другое важное отличие состоит в том, как реализованы глобальные функции. В python глобальные переменные представлены словарем (как и локальные). Это означает, что следующее:
foo(5)
эквивалентно этому в python:
globals()["foo"].__call__(5)
В то время как ruby эффективно делает это:
Object.foo(5)
Это имеет большое влияние на подход, используемый при написании кода на обоих языках. Библиотеки Ruby имеют тенденцию расти за счет добавления методов к существующим типам, таким как Object, в то время как библиотеки Python имеют тенденцию расти за счет добавления глобальных функций в данный модуль.
globals()["foo"].__call__(5)
Ruby эффективно делает следующее:
Object.foo(5)
Это сильно влияет на подход, используемый при написании кода на обоих языках. Библиотеки Ruby имеют тенденцию расти за счет добавления методов к существующим типам, таким как Object, в то время как библиотеки Python имеют тенденцию расти за счет добавления глобальных функций в данный модуль.
globals()["foo"].__call__(5)
Ruby эффективно делает следующее:
Object.foo(5)
Это сильно влияет на подход, используемый при написании кода на обоих языках. Библиотеки Ruby имеют тенденцию расти за счет добавления методов к существующим типам, таким как Object, в то время как библиотеки Python имеют тенденцию расти за счет добавления глобальных функций в данный модуль.