Абстрактные статические методы являются своего рода нечетным понятием. Статический метод в основном «жестко кодирует» метод для класса, убедившись, что существует только один экземпляр (~ singleton). Но сделать его абстрактным означает, что вы хотите заставить другой класс его реализовать.
Я вижу, что вы пытаетесь сделать, но когда вы занимаетесь абстрактными классами, я бы избегал статических методов в базовом классе. Вместо этого вы можете использовать позднюю статическую привязку (static: :) для вызова метода tableStruct в «дочернем» классе. Это не приводит к тому, что метод будет реализован как абстрактный, но вы можете протестировать реализацию и выбросить исключение, если оно не существует.
public static function foo(){
// call the method in the child class
$x = static::tableStruct();
}
Для чистого модуля 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
Выполнение 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 находится на моей установке!
Не все модули Python записаны в Python. Дата и время, оказывается, один из них, который не является, и (на Linux) datetime.so.
необходимо было бы загрузить исходный код на библиотеку стандарта Python для достигания его.
Эти sys.path
список содержит список каталогов, которые будут искаться модули во времени выполнения:
python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
datetime
встроенный модуль, таким образом, нет никакого (Python) исходный файл.
Для модулей, прибывающих от .py
(или .pyc
) файлы, можно использовать mymodule.__file__
, например,
> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
Воспользуйтесь этой изящной командой «cdp» , чтобы записать cd в каталог, содержащий исходный код для указанного модуля Python:
cdp () {
cd "$(python -c "import os.path as _, ${1}; \
print _.dirname(_.realpath(${1}.__file__[:-1]))"
)"
}