Прежде чем начинать разработку, надо познакомиться хотя бы с основами языка. Разработка методом тыка и копи-пейста ни к чему хорошему не приводит.
Что значит "скачали" и установили? Вообще-то с pip не нужен шаг со скачиванием — он сам умеет скачивать откуда угодно. И куда установили - в системный каталог, или в virtualenv? Если в virtualenv, то сначала ее надо активировать.
И пути к модулям Python ищет не в переменной PATH, а в переменной PYTHONPATH.
Я вот только что специально открыл несколько классов из Django. Практически ни в одном не используются атрибуты, начинающиеся с подчеркивания. Только в одном классе в defaulttags.py.
Если подчеркивания и встречаются, то в названиях служебных методов, таких как __init__, __enter__.
Вряд ли вы станете спорить с тем, что если бы в Django был класс, как у автора вопроса, то в нем названия атрибутов не начинались бы с подчеркивания.
PEP-8 вообще этот вопрос не регламентирует, он лишь объясняет для чего нужны подчеркивания (name mangling).
DDDsa, Я говорю лишь о том, что данный прием для скрытия переменных почти не используется в реальном мире. Откройте любой проект на Python на GitHub и попробуйте найти имена, начинающиеся с одного, тем более, двух подчеркиваний. Скорее всего, не найдете, или в мизерном количестве.
Не принято в Python использовать эту нотацию, за исключением очень редких случаев. В таком контексте, как у автора, вообще встретить использование двух подчеркиваний нереально. Любой Python программист будет использовать обычные имена: name, age, address.
Шебанг (#!/usr/bin/env) должен быть первой строкой в файле и без пробелов между диезом и восклицательным знаком. И автор вопроса под Windows, там шебанг не работает и вообще не нужен.
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello')
hello
Игорь, тостер не прислал уведомление о вашем ответе, или я его не заметил. Нет, дело не в скобочках. Геттеры-сеттеры нужны в Java потому что, если в самом начале не сделать свойство с геттерами-сеттерами, то потом это сделать уже не получится. Поэтому приходится заниматься предварительной оптимизацией (что является корнем всех зол, как известно), и на всякий случай добавлять совершенно бойлерплейтные геттеры-сеттеры для каждого свойства. Чтобы потом, если вдруг понадобится, можно было добавить динамическое поведение.
Ни скобочки, ни полиморфизм здесь не при чем. Просто один язык более динамический, чем другой. Кто-то это считает недостатком, кто-то достоинством, но это точно не вопрос из плоскости какое ООП более настоящее.
newaitix, ну, учитывая что вам все понятнейшим образом в сообщениях об ошибках написано, а вы не читаете, вас ждет еще множество неприятных сюрпризов на пути разработчика.
В частности, с чего вы взяли, что вам надо по ssh входить на GitHub? К чему? GitHub вам прямо об этом и написал: ключ для входа верный, но мы здесь не для того, чтобы вы входили напрямую на GitHub.
Вам надо было клонировать репозиторий используя протокол ssh. Просто взять и скопировать строчку, которую GitHub пишет на основной странице репозитория.
Вы так психуете на тривиальных моментах и на идеальных сообщениях об ошибках, которые в несколько строк однозначно указывают вам на ошибку и как ее исправить. В жизни такое редко бывает, обычно что-то не работает и не только не пишет, как исправить, но и вообще ничего вразумительного не пишет.
Если вы в таком простом случае сдались, что же вы будете делать, когда с настоящей проблемой столкнетесь?..
newaitix, значит вы неправильно поняли. Это все равно, что не освоить экскаватор, и пытаться вырыть фундамент для дома детским совочком.
Хотя git освоить намного проще, чем экскаватор. Если вы по одному из 1,500,000 руководств по Git, которые написаны на всех языках мира, для всех уровней пользователей не смогли, может быть, вам стоит вообще другую область деятельности выбрать?
Без обид. Просто реально сложно понять, что тут такого уж сложного. Настроить один раз SSH, больше уже ничего не требуется.
Про работу через https у вас git прямо открытым текстом в ошибке пишет: "Поменяйте url на ..." (поскольку вы вставили текст картинкой зачем-то, скопировать невозможно).
newaitix, вам все в ошибке git написал. Либо используйте протокол https и вводите пароль ручками каждый раз, либо научитесь ssh и ssh ключам, и клонируйте правильно с ssh url'ом.
Герман, Можно было бы. Всего-то надо было бы подмонтировать раздел и запустить grub-install или что там сейчас используется вместо него.
Раньше, лет 15 назад проделывал это многократно, но уже давно не использую Windows, поэтому не помню уже как именно это делается. Впрочем, это вопрос 5-10 минут гугления.
Маловато подробностей. Что значит "Не дает сделать"?
И если вы все проделали в Windows и переустановили Linux, то зачем нужно что-то еще?
После изменения разделов в Windows у вас Linux не загружался, потому что надо было заново установить загрузчик (grub), например, загрузив Linux с LiveCD/флэшки.
Игорь, на Java мешает написать статическая типизация, в частности. Например, если в Python я сначала написал класс:
class Bird:
legs = 2
А затем мне понадобилось, чтобы количество ног было динамически вычисляемым, то я могу просто написать:
class Bird:
@property
def legs(self):
return random.randint(1, 10)
И это не поломает код, который пользуется моим классом. А в Java такое изменение сломает код пользователей. Поэтому и пишутся тонны бойлерплейта, начиная с геттеров-сеттеров, заканчивая фабриками и многим другим.
Дело не в том, что один подход - это настоящий ООП, а другой - нет. Дело в том, что многое из того, что вы приводите как аргумент в пользу "настоящего" ООП - это просто преодоление особенностей языка (со статической типизацией проще сделать не получится).
Игорь, во-первых, это все либо есть в Python, либо тривиально реализуется. Есть даже больше ООП фишек, например, метаклассы, которых в Java нет (во всяком случае, когда я в последний раз имел дело с Java, не было).
Во-вторых, не все паттерны (такие как фабрика, например), имеют смысл во всех языках. Паттерны очень часто неразрывно связаны с языками, в которых их впервые изобрели. Например, паттерн Singleton не имеет никакого смысла в Python, но это не делает Python не объектно-ориентированным языком.
Но вообще, все это поверхностные различия. И тот и другой язык — императивные, объектно-ориентированные.
ADUMA, Я на Django делаю проекты более 10 лет - еще с бета-версий Django. И то не могу сказать, что всю ее знаю. А вокруг нее экосистема расширений просто необъятная.
И чтобы начать делать какие-то серьезные вещи, надо не менее 1-2 лет опыта, мне кажется.
Основы Django можно получить мне кажется где-то за 3-7 дней, по великолепному руководству, входящему, опять же, в состав документации Django. Более того, именно с него и надо начинать, потому что есть много руководств в сети, в которых написана несусветная ересь от людей, не прочитавших даже данный туториал.
Лично я в свое время сразу начал с production-сайта (он, кстати, до сих пор в сети, и до сих пор на Django). Написал будущему работодателю, что знаю Django, сам сел за туториал, и в итоге, склепал все-таки сайт.
Но у меня к тому времени был уже лет 7-8 опыта разработки на Python, в том числе сайтов на других фреймворках (к тому времени, моей специализацией были ныне незаслуженно забытые Zope и Plone).
Что значит "скачали" и установили? Вообще-то с pip не нужен шаг со скачиванием — он сам умеет скачивать откуда угодно. И куда установили - в системный каталог, или в virtualenv? Если в virtualenv, то сначала ее надо активировать.
И пути к модулям Python ищет не в переменной
PATH
, а в переменнойPYTHONPATH
.