Поскольку вы используете power-shell
для входа в удаленный экземпляр / службу, вся рабочая среда будет отличаться от вашей локальной среды.
Как я уже упоминал в комментариях, сначала необходимо:
node -v
, поскольку требуется конкретная версия ; если нет, вам нужно вручную установить это, следуя node.js ; ng serve
. Пожалуйста, проверьте и дайте мне знать, если что-то пойдет не так.
Вы можете проверить, работает ли ваш сервер по
sudo lsof -i -P -n | grep LISTEN | grep 4200
или
[ 115]
в вашем пульте. [+1121]
В первую очередь: атрибуты класса или атрибуты экземпляра? Или оба?=)
Обычно Вы просто включаете атрибуты экземпляра __init__
, и класс приписывает в определении класса, часто перед определениями метода..., которые должны, вероятно, касаться 90% вариантов использования.
Если код добавляет, что атрибуты на лету, это, вероятно (надо надеяться, :-) имеет серьезные основания для того, чтобы сделать так... усиление динамических функций, самоанализа, и т.д. Кроме этого, добавляя приписывает этот путь, вероятно, менее распространено, чем Вы думаете.
Я сказал бы, общепринятая практика, чтобы избежать, чтобы это не писало классы, где можно быть 1 000 строк далеко от чего-либо!
Серьезно, это слишком очень для примерно любого полезного класса, особенно на языке, который так же выразителен как Python. Используя больше из того, что Стандартные предложения Библиотеки и абстрагирующий далеко кодируют в отдельные модули, должно помочь подавлению Вашего количества LOC.
Самые большие классы в стандартной библиотеке имеют значительно ниже 100 строк!
Переменные экземпляра должны быть инициализированы в классе __init__()
метод. (В целом)
Если это не возможно. Можно использовать __dict__
получить словарь всех переменных экземпляра объекта во время времени выполнения. Если действительно необходимо отследить, это в документации добавляет список переменных экземпляра, которые Вы используете в docstring класса.
pylint может статически обнаружить атрибуты, которые не обнаруживаются в __init__
, наряду со многими другими потенциальными ошибками.
Я также рекомендовал бы писать модульные тесты и выполнить Ваш код часто для обнаружения этих типов "ой" программирования ошибок.
Это кажется, что Вы говорите о переменных экземпляра и не переменных класса. Обратите внимание, что в следующем коде переменной класса и b является переменной экземпляра.
class foo:
a = 0 #class variable
def __init__(self):
self.b = 0 #instance variable
Относительно гипотетического, где Вы создаете ненужную переменную экземпляра, потому что другой был приблизительно одной тысячей строк далеко: лучшее решение не состоит в том, чтобы иметь классов, которые являются одной тысячей строк долго. Если Вы не можете избежать длины, то Ваш класс должен иметь четко определенную цель, и это позволит Вам сохранить все сложности в Вашей голове сразу.
Система поколения документации, такая как Epydoc может использоваться в качестве ссылки для того, какой экземпляр/переменные класса объект имеет, и если Вы волнуетесь по поводу случайного создания новых переменных через опечатки, можно использовать PyChecker для проверки кода на это.
Мне кажется, что основной вопрос здесь - то, что Вы думаете с точки зрения C++, когда Вы работаете в Python.
Наличие 1 000 классов строки не является очень мудрой вещью так или иначе в Python, (я знаю, что это происходит много в C++ хотя),
Учитесь использовать динамизм, который Python дает Вам, например, можно объединить списки и словари очень творческими способами и сохранить Ваш сам сотни бесполезных строк кода.
Например, при отображении строк на функции (для диспетчеризации), можно использовать то, что функции являются объектами первого класса и имеют словарь, который идет как:
d = {'command1' : func1, 'command2': func2, 'command3' : func3}
#then somewhere else use this list to dispatch
#given a string `str`
func = d[str]
func() #call the function!
Что-то вроде этого в C++ подняло бы sooo много строк кода!
Это - общее беспокойство, я получаю известие от многих программистов, которые происходят из C, C++ или другого статически типизированного языка, где переменные предварительно объявляются. На самом деле это была одна из самых больших проблем, которые мы слышали, когда мы убеждали программистов в нашей организации отказаться от C для высокоуровневых программ и использовать Python вместо этого.
В теории да можно добавить переменные экземпляра к объекту в любое время. Да это может произойти от опечаток и т.д. На практике это редко приводит к ошибке. Когда это делает, ошибки обычно должны не трудно найти.
Пока Ваши классы не чрезмерно увеличены в размере (1 000 строк довольно огромно!) и у Вас есть вполне достаточные модульные тесты, необходимо редко работать в к настоящей проблеме. В случае, если Вы делаете, легко спасть до консоли Python почти в любое время и осмотреть вещи так, как Вы желаете.
Рассмотрите использование слотов.
Например:
class Foo: __slots__ = "a b c".split() x = Foo() x.a =1 # ok x.b =1 # ok x.c =1 # ok x.bb = 1 # will raise "AttributeError: Foo instance has no attribute 'bb'"
Это обычно - беспокойство на любом языке динамического программирования - любой язык, который не требует объявления переменной - что опечатка в имени переменной создаст новую переменную вместо повышения исключение или вызовет ошибку времени компиляции. Слоты помогают с переменными экземпляра, но не помогают Вам с, переменные объема модуля, globals, локальные переменные, и т.д. Нет никакой серебряной пули для этого; это - часть компромисса не необходимости объявить переменные.
Самое легкое должно использовать IDE. PyDev является плагином для затмения.
Я не полное на эксперте во всех отношениях pythonic, но в целом я определяю своих участников класса прямо при определении класса в Python, поэтому если я добавляю участников, они - весь родственник.
Мое личное мнение - то, что участники класса должны быть объявлены в одном разделе по этой определенной причине.
Локальные ограниченные по объему переменные, otoh, должны быть определены самые близкие к тому, когда они используются (кроме C - которому я верю, все еще требует, чтобы переменные были объявлены в начале метода).