Что хороший путь состоит в том, чтобы отслеживать переменные экземпляра класса в Python?

Поскольку вы используете power-shell для входа в удаленный экземпляр / службу, вся рабочая среда будет отличаться от вашей локальной среды.

Как я уже упоминал в комментариях, сначала необходимо:

  • , убедиться в правильности node -v, поскольку требуется конкретная версия ; если нет, вам нужно вручную установить это, следуя node.js ;
  • секунды, вам необходимо переустановить все необходимые модули в папке вашего проекта [112 ];
  • , тогда вы сможете начать свой проект к ng serve.

Пожалуйста, проверьте и дайте мне знать, если что-то пойдет не так.

Еще один трюк

Вы можете проверить, работает ли ваш сервер по

  • sudo lsof -i -P -n | grep LISTEN | grep 4200 или

  • [ 115]

в вашем пульте. [+1121]

9
задан Michael Kristofik 30 January 2009 в 08:54
поделиться

10 ответов

В первую очередь: атрибуты класса или атрибуты экземпляра? Или оба?=)

Обычно Вы просто включаете атрибуты экземпляра __init__, и класс приписывает в определении класса, часто перед определениями метода..., которые должны, вероятно, касаться 90% вариантов использования.

Если код добавляет, что атрибуты на лету, это, вероятно (надо надеяться, :-) имеет серьезные основания для того, чтобы сделать так... усиление динамических функций, самоанализа, и т.д. Кроме этого, добавляя приписывает этот путь, вероятно, менее распространено, чем Вы думаете.

8
ответ дан 30 October 2019 в 02:25
поделиться

Я сказал бы, общепринятая практика, чтобы избежать, чтобы это не писало классы, где можно быть 1 000 строк далеко от чего-либо!

Серьезно, это слишком очень для примерно любого полезного класса, особенно на языке, который так же выразителен как Python. Используя больше из того, что Стандартные предложения Библиотеки и абстрагирующий далеко кодируют в отдельные модули, должно помочь подавлению Вашего количества LOC.

Самые большие классы в стандартной библиотеке имеют значительно ниже 100 строк!

10
ответ дан 30 October 2019 в 02:25
поделиться

Переменные экземпляра должны быть инициализированы в классе __init__() метод. (В целом)

Если это не возможно. Можно использовать __dict__ получить словарь всех переменных экземпляра объекта во время времени выполнения. Если действительно необходимо отследить, это в документации добавляет список переменных экземпляра, которые Вы используете в docstring класса.

4
ответ дан 30 October 2019 в 02:25
поделиться

pylint может статически обнаружить атрибуты, которые не обнаруживаются в __init__, наряду со многими другими потенциальными ошибками.

Я также рекомендовал бы писать модульные тесты и выполнить Ваш код часто для обнаружения этих типов "ой" программирования ошибок.

4
ответ дан 30 October 2019 в 02:25
поделиться

Это кажется, что Вы говорите о переменных экземпляра и не переменных класса. Обратите внимание, что в следующем коде переменной класса и b является переменной экземпляра.

class foo:
  a = 0 #class variable

  def __init__(self):
    self.b = 0 #instance variable

Относительно гипотетического, где Вы создаете ненужную переменную экземпляра, потому что другой был приблизительно одной тысячей строк далеко: лучшее решение не состоит в том, чтобы иметь классов, которые являются одной тысячей строк долго. Если Вы не можете избежать длины, то Ваш класс должен иметь четко определенную цель, и это позволит Вам сохранить все сложности в Вашей голове сразу.

3
ответ дан 30 October 2019 в 02:25
поделиться

Система поколения документации, такая как Epydoc может использоваться в качестве ссылки для того, какой экземпляр/переменные класса объект имеет, и если Вы волнуетесь по поводу случайного создания новых переменных через опечатки, можно использовать PyChecker для проверки кода на это.

3
ответ дан 30 October 2019 в 02:25
поделиться

Мне кажется, что основной вопрос здесь - то, что Вы думаете с точки зрения 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 много строк кода!

2
ответ дан 30 October 2019 в 02:25
поделиться

Это - общее беспокойство, я получаю известие от многих программистов, которые происходят из C, C++ или другого статически типизированного языка, где переменные предварительно объявляются. На самом деле это была одна из самых больших проблем, которые мы слышали, когда мы убеждали программистов в нашей организации отказаться от C для высокоуровневых программ и использовать Python вместо этого.

В теории да можно добавить переменные экземпляра к объекту в любое время. Да это может произойти от опечаток и т.д. На практике это редко приводит к ошибке. Когда это делает, ошибки обычно должны не трудно найти.

Пока Ваши классы не чрезмерно увеличены в размере (1 000 строк довольно огромно!) и у Вас есть вполне достаточные модульные тесты, необходимо редко работать в к настоящей проблеме. В случае, если Вы делаете, легко спасть до консоли Python почти в любое время и осмотреть вещи так, как Вы желаете.

2
ответ дан 30 October 2019 в 02:25
поделиться

Рассмотрите использование слотов.

Например:

   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, локальные переменные, и т.д. Нет никакой серебряной пули для этого; это - часть компромисса не необходимости объявить переменные.

-2
ответ дан 30 October 2019 в 02:25
поделиться

Самое легкое должно использовать IDE. PyDev является плагином для затмения.

Я не полное на эксперте во всех отношениях pythonic, но в целом я определяю своих участников класса прямо при определении класса в Python, поэтому если я добавляю участников, они - весь родственник.

Мое личное мнение - то, что участники класса должны быть объявлены в одном разделе по этой определенной причине.

Локальные ограниченные по объему переменные, otoh, должны быть определены самые близкие к тому, когда они используются (кроме C - которому я верю, все еще требует, чтобы переменные были объявлены в начале метода).

0
ответ дан 30 October 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: