Есть ли встроенная функция для печати всех текущих свойств и значений объекта?

Я нашел ответы выше, все еще есть некоторые неясные вещи, которые будут вводить пользователей в заблуждение. Во-первых, он уверен, что git push new_origin --all и git push new_origin --mirror не могут дублировать все ветви происхождения, а просто дублируют ваши локальные ветви на ваш new_origin.

Ниже приведены два полезных метода, которые я тестировал:

1, дублируйте с помощью clone bare repo. git clone --bare origin_url, затем введите папку и git push new_origin_url --mirror. Таким образом, вы также можете использовать git clone --mirror origin_url, оба --bare и --mirror загружают голый репо, не считая рабочего пространства. пожалуйста, обратитесь к this

2, если у вас есть git repo с помощью git clone, что означает, что у вас есть рабочее пространство repo и git, вы можете использовать git remote add new_origin new_origin_url, а затем git push new_origin +refs/remotes/origin/\*:refs/heads/\*, а затем git push new_origin --tags

Таким образом, вы получите дополнительную головную ветвь, которая не имеет смысла.

822
задан martineau 19 June 2017 в 13:00
поделиться

8 ответов

Вы действительно смешиваете вместе две разных вещи.

Использование dir() , vars() или inspect модуль для получения то, чем Вы интересуетесь (я использую __builtins__ в качестве примера; можно использовать любой объект вместо этого).

>>> l = dir(__builtins__)
>>> d = __builtins__.__dict__

Печать, которую словарь, однако необычный, Вы любите:

>>> print l
['ArithmeticError', 'AssertionError', 'AttributeError',...

или

>>> from pprint import pprint
>>> pprint(l)
['ArithmeticError',
 'AssertionError',
 'AttributeError',
 'BaseException',
 'DeprecationWarning',
...

>>> pprint(d, indent=2)
{ 'ArithmeticError': <type 'exceptions.ArithmeticError'>,
  'AssertionError': <type 'exceptions.AssertionError'>,
  'AttributeError': <type 'exceptions.AttributeError'>,
...
  '_': [ 'ArithmeticError',
         'AssertionError',
         'AttributeError',
         'BaseException',
         'DeprecationWarning',
...

Симпатичная печать также доступна в интерактивном отладчике как команда:

(Pdb) pp vars()
{'__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>,
                  'AssertionError': <type 'exceptions.AssertionError'>,
                  'AttributeError': <type 'exceptions.AttributeError'>,
                  'BaseException': <type 'exceptions.BaseException'>,
                  'BufferError': <type 'exceptions.BufferError'>,
                  ...
                  'zip': <built-in function zip>},
 '__file__': 'pass.py',
 '__name__': '__main__'}
497
ответ дан 19 June 2017 в 13:00
поделиться

dir был упомянут, но это только даст Вам имена атрибутов. Если Вы хотите их значения, также пробуют __ dict __.

class O:
   def __init__ (self):
      self.value = 3

o = O()

Вот вывод:

>>> o.__dict__

{'value': 3}
49
ответ дан Vadim Kotov 19 June 2017 в 13:00
поделиться

Вы хотите vars() смешанный с pprint():

from pprint import pprint
pprint(vars(your_object))
873
ответ дан lmiguelvargasf 19 June 2017 в 13:00
поделиться

Пример метапрограммирования Дамп возражает с волшебством :

$ cat dump.py
#!/usr/bin/python
import sys
if len(sys.argv) > 2:
    module, metaklass  = sys.argv[1:3]
    m = __import__(module, globals(), locals(), [metaklass])
    __metaclass__ = getattr(m, metaklass)

class Data:
    def __init__(self):
        self.num = 38
        self.lst = ['a','b','c']
        self.str = 'spam'
    dumps   = lambda self: repr(self)
    __str__ = lambda self: self.dumps()

data = Data()
print data

Без аргументов:

$ python dump.py
<__main__.Data instance at 0x00A052D8>

С Gnosis Utils:

$ python dump.py gnosis.magic MetaXMLPickler
<?xml version="1.0"?>
<!DOCTYPE PyObject SYSTEM "PyObjects.dtd">
<PyObject module="__main__" class="Data" id="11038416">
<attr name="lst" type="list" id="11196136" >
  <item type="string" value="a" />
  <item type="string" value="b" />
  <item type="string" value="c" />
</attr>
<attr name="num" type="numeric" value="38" />
<attr name="str" type="string" value="spam" />
</PyObject>

Это немного устарело, но все еще является рабочим.

7
ответ дан jfs 19 June 2017 в 13:00
поделиться

Можно использовать "dir ()" функция, чтобы сделать это.

>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo
t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder
, 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info'
 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault
ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he
version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_
ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit
, 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption
', 'winver']
>>>

Другой полезной функцией является справка.

>>> help(sys)
Help on built-in module sys:

NAME
    sys

FILE
    (built-in)

MODULE DOCS
    http://www.python.org/doc/current/lib/module-sys.html

DESCRIPTION
    This module provides access to some objects used or maintained by the
    interpreter and to functions that interact strongly with the interpreter.

    Dynamic objects:

    argv -- command line arguments; argv[0] is the script pathname if known
19
ответ дан S.Lott 19 June 2017 в 13:00
поделиться
def dump(obj):
  for attr in dir(obj):
    print("obj.%s = %r" % (attr, getattr(obj, attr)))

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

174
ответ дан Dan Lenski 19 June 2017 в 13:00
поделиться

В большинстве случаев использование __dict__ или dir() получит Вас информация, которую Вы желаете. Если, необходимо оказаться, нужно больше деталей, стандартная библиотека включает эти , осматривают модуль, который позволяет Вам получать некоторую впечатляющую сумму детали. Некоторые реальные самородки информации включают:

  • названия функции и параметров метода
  • иерархии классов
  • исходный код реализации функции/объекты класса
  • локальные переменные из объекта кадра

, Если Вы просто ищете, "что имеют значения атрибута мой объект?", тогда dir() и __dict__, вероятно, достаточны. Если Вы действительно надеетесь рыть в текущее состояние произвольных объектов (учет того факта, что в Python почти все - объект), то inspect достойно соображения.

11
ответ дан anatoly techtonik 19 June 2017 в 13:00
поделиться

Для печати текущего состояния объекта, Вы могли бы:

>>> obj # in an interpreter

или

print repr(obj) # in a script

или

print obj

Для Ваших классов определяют __str__ или __repr__ методы. От документация Python :

__repr__(self) Названный repr() встроенная функция и преобразованиями строк (инвертируют кавычки) вычислить "официальное" строковое представление объекта. Если вообще возможный, это должно быть похожим на допустимое выражение Python, которое могло бы использоваться для воссоздания объекта с тем же значением (учитывая соответствующую среду). Если это не возможно, строка формы "<... некоторое полезное описание...>" должно быть возвращено. Возвращаемое значение должно быть строковым объектом. Если класс определяет repr (), но не __str__(), то __repr__() также используется, когда "неофициальное" строковое представление экземпляров того класса требуется. Это обычно используется для отладки, таким образом, важно, чтобы представление было информационно-богато и однозначно.

__str__(self) Названный str() встроенная функция и оператором печати для вычисления "неофициального" строкового представления объекта. Это отличается от [1 111], в котором это не должно быть допустимое выражение Python: более удобное или краткое представление может использоваться вместо этого. Возвращаемое значение должно быть строковым объектом.

20
ответ дан jfs 19 June 2017 в 13:00
поделиться
Другие вопросы по тегам:

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