|
Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!
|
Методы и объекты PythonЧто это такоеЯ составил обзорную таблицу всех (почти всех, см. ниже) методов всех (снова почти) встроенных классов (типов) языка Python. Таблица получилась очень большая и я её выложил в на отдельной странице. Таблица составлена для Python 2.5.1 (но есть планы по её развитию, см. ниже).
Обратите внимание!
Что можно узнать нового.Составляя эту таблицу я узнал на много больше нового, чем ожидал. Надеюсь она будет не менее информативна и для вас. Знаете ли вы, что на ряду с методом >>> (1.1).__eq__(1) False >>> (1).__eq__(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'int' object has no attribute '__eq__' Вы уверены, что знаете все методы объектов-строк?
Даже, если вы знаете методы Задумывались ли вы о различиях методов
Кроме того, имея под рукой такую таблицу, очень легко писать свои классы, объекты которых ведут себя, как данные встроенных типов. Глядя на эту таблицу можно окинуть весь питон одним взглядом. Но рассматривая её надо иметь ввиду некоторые подводные камни, чтобы не сделать ложных выводов. Подводные камниНадо иметь ввиду, что если в таблице не упомянут какой-то метод, то, строго говоря, это не значит, что его нет. Так, на пример, метод a = 1 b = 2 if a == b: pass вполне законна. Но в большинстве случаев, наличие или отсутствие метода говорит о наличии или отсутствии соответствующей возможности. На пример, метод >>> len([1, 2, 3]) 3 >>> len(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len() Второй подводный камень — таблица не совсем полна. Для тех, кто хочет лучше понять, что это за таблица, расскажу, как они получена. Как получена эта таблицаПрототипПрототип получен очень простым скриптом. Примерно таким: #!/usr/local/bin/python
types = []
all_meth = set()
for i in (None,
bool(1),
1, 1L, 1.0, 1j,
'1', u'1',
[], (), {}, set(), buffer(''), xrange(0),
lambda:1):
d = dir(i)
types.append((str(type(i))[7:-2],
dict(map(lambda x: (x, i.__getattribute__(x).__doc__), d)),
i))
all_meth.update(d)
print '<html><body>' \
'<table border="1">' \
'<tr><th></th>'
for t in types:
print '<th>%s</th>' % t[0]
print '</tr>'
for m in sorted(all_meth):
print '<tr valign="top">'
print '<th>%s</th>' % m
for t in types:
if m in t[1]:
print '<td title="%s / %s">%s</td>' % (t[0],
m, str(t[1][m]).replace(
'&', '&' ).replace(
'<', '<' ).replace(
'>', '>' ).replace(
'"', '"'))
else:
print '<td>n/i</td>'
print '</tr>'
print '</table></body></html>'На самом деле, мой скрипт был чуть-чуть сложнее,
но не принципиально. Кроме того, в нём отсутствовал
тип Ручная доводкаПотом я уделил несколько часов ручной доводке прототипа:
Что хотелось бы доделатьКогда таблица была готова, стало ясно, что некоторые вещи можно было сделать лучше. Планы примерно такие:
Если у вас есть конструктивные предложения — пишите. |
|
|
|