Я нашел ответы выше, все еще есть некоторые неясные вещи, которые будут вводить пользователей в заблуждение. Во-первых, он уверен, что 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
Таким образом, вы получите дополнительную головную ветвь, которая не имеет смысла.
Вы действительно смешиваете вместе две разных вещи.
Использование 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__'}
dir был упомянут, но это только даст Вам имена атрибутов. Если Вы хотите их значения, также пробуют __ dict __.
class O:
def __init__ (self):
self.value = 3
o = O()
Вот вывод:
>>> o.__dict__
{'value': 3}
Вы хотите vars()
смешанный с pprint()
:
from pprint import pprint
pprint(vars(your_object))
Пример метапрограммирования Дамп возражает с волшебством :
$ 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>
Это немного устарело, но все еще является рабочим.
Можно использовать "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
def dump(obj):
for attr in dir(obj):
print("obj.%s = %r" % (attr, getattr(obj, attr)))
существует много сторонних функций там, которые добавляют вещи как обработка исключений, национальная печать / печать специального символа, рекурсивно вызывающая во вложенные объекты и т.д. согласно предпочтениям их авторов. Но они все в основном сводятся к этому.
В большинстве случаев использование __dict__
или dir()
получит Вас информация, которую Вы желаете. Если, необходимо оказаться, нужно больше деталей, стандартная библиотека включает эти , осматривают модуль, который позволяет Вам получать некоторую впечатляющую сумму детали. Некоторые реальные самородки информации включают:
, Если Вы просто ищете, "что имеют значения атрибута мой объект?", тогда dir()
и __dict__
, вероятно, достаточны. Если Вы действительно надеетесь рыть в текущее состояние произвольных объектов (учет того факта, что в Python почти все - объект), то inspect
достойно соображения.
Для печати текущего состояния объекта, Вы могли бы:
>>> 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: более удобное или краткое представление может использоваться вместо этого. Возвращаемое значение должно быть строковым объектом.