Как мне найти расположение исходников модуля Python?

Абстрактные статические методы являются своего рода нечетным понятием. Статический метод в основном «жестко кодирует» метод для класса, убедившись, что существует только один экземпляр (~ singleton). Но сделать его абстрактным означает, что вы хотите заставить другой класс его реализовать.

Я вижу, что вы пытаетесь сделать, но когда вы занимаетесь абстрактными классами, я бы избегал статических методов в базовом классе. Вместо этого вы можете использовать позднюю статическую привязку (static: :) для вызова метода tableStruct в «дочернем» классе. Это не приводит к тому, что метод будет реализован как абстрактный, но вы можете протестировать реализацию и выбросить исключение, если оно не существует.

public static function foo(){
    // call the method in the child class 
    $x = static::tableStruct();
}
443
задан Zizouz212 24 February 2016 в 22:14
поделиться

6 ответов

Для чистого модуля Python можно найти источник путем рассмотрения themodule.__file__. Модуль даты и времени, однако, записан в C, и поэтому datetime.__file__ точки в .so файл (нет никакого datetime.__file__ в Windows), и поэтому, Вы не видите источник.

, Если Вы загружаете источник Python tarball и извлекаете его, код модулей может быть найден в эти Модули подкаталог.

, Например, если Вы хотите найти код даты и времени для python 2.6, можно посмотреть

Python-2.6/Modules/datetimemodule.c

, можно также найти последнюю Подвижную версию в сети в https://hg.python.org/cpython/file/tip/Modules / _ datetimemodule.c

347
ответ дан Marko Kohtala 24 February 2016 в 22:14
поделиться
  • 1
    Педант: " var" переменная , чей тип будет выведен компилятором. Объект незатронут. " dynamic" переменная, которая со статическим контролем типов как " dynamic" - это - механизм отправки, который изменяется (переменная все еще вводится как " dynamic"). – Marc Gravell♦ 18 November 2008 в 10:02

Выполнение python -v из командной строки должно сказать Вам, что импортируется и из где. Это работает на меня в Windows и Mac OS X.

C:\>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\Python24\lib\site.pyc has bad mtime
import site # from C:\Python24\lib\site.py
# wrote C:\Python24\lib\site.pyc
# C:\Python24\lib\os.pyc has bad mtime
import os # from C:\Python24\lib\os.py
# wrote C:\Python24\lib\os.pyc
import nt # builtin
# C:\Python24\lib\ntpath.pyc has bad mtime
...

я не уверен, что те плохо mtime's находится на моей установке!

209
ответ дан jblocksom 24 February 2016 в 22:14
поделиться

Не все модули Python записаны в Python. Дата и время, оказывается, один из них, который не является, и (на Linux) datetime.so.

необходимо было бы загрузить исходный код на библиотеку стандарта Python для достигания его.

0
ответ дан Dave Forgac 24 February 2016 в 22:14
поделиться

Эти sys.path список содержит список каталогов, которые будут искаться модули во времени выполнения:

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
63
ответ дан Ben Liyanage 24 February 2016 в 22:14
поделиться

datetime встроенный модуль, таким образом, нет никакого (Python) исходный файл.

Для модулей, прибывающих от .py (или .pyc) файлы, можно использовать mymodule.__file__, например,

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
29
ответ дан Bjarke Ebert 24 February 2016 в 22:14
поделиться

Воспользуйтесь этой изящной командой «cdp» , чтобы записать cd в каталог, содержащий исходный код для указанного модуля Python:

cdp () {
  cd "$(python -c "import os.path as _, ${1}; \
    print _.dirname(_.realpath(${1}.__file__[:-1]))"
  )"
}
9
ответ дан 22 November 2019 в 23:03
поделиться
Другие вопросы по тегам:

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