Форум сайта python.su
Не могу понять как в питоне работают с классами. Для примера есть файл /home/user/class.py в котором описан класс
class MyClass:
"A simple example class"
i = 12345
def f(self):
return 'hello world'
Офлайн
offlineclass - плохое название для файла. переименуй хотя бы в my_class.py. Потом, если файл лежит в тоже директории что и вызвающий скрипт, то пишешь просто
Теперь я хочу из другого файла ( /home/user/script.py ) воспользоваться этим классом и вызвать функцию f().
import my_class
mc = my_class.MyClass()
mc.f()
offlineправду говорят, чтобы питон “видил” модули директории с ними должны быть прописаны в $PYTHON_PATH переменной окружения. Или в самом скрипте можно динамически добавлять:
Знакомые говорят что надо прописывать папку /home/user в path и делать import.
import sys
sys.path.append( "/path/to/my/module/directory/" )
#тут уже можно импортировать модули из "/path/to/my/module/directory/"
Офлайн
1) class.py – плохое имя. Не называй свои модули/пакеты именами встроенных конструкций языка и/или пакетами стандартных пакетов
2) читай документацию (~1 ~2) или книги (~1, ~2, ~3)
3)
#!/usr/bin/env python
# /home/user/py/foo.py
class Foo(object):
“”“An example”“”
num = 1234
def meth(self, name='world'):
return 'Hello %s!" % name
#!/usr/bin/env python
# /home/user/py/script.py
from foo import Foo
f = Foo()
print “Foo class: %r” % Foo
print “Foo instance: %r” % f
print “f's class attribute: %r” % f.num
print “f's method: %r” % f.meth('Mike')
Отредактировано (Авг. 30, 2007 20:40:27)
Офлайн
Большое спасибо, насчёт названий скриптов понял.
Вариант j2a очень порадовал, всё таки не надо добавлять путь в path. Но тут же появился другой вопрос, а что за “object” появился в параметрах класса Foo? И почему без этого слова не импортируется класс?
И второй вопрос. А если файлы находятся в разных папках, например foo.py теперь лежит в subdirectory с именем “something”. Уже никак без добавления в path не обойтись?
Офлайн
offlineИмпортируется и так. Просто оbject это базавый класс для new-style классов в python. На ранних этапах работы с питон об этом можно не задумываться.
Но тут же появился другой вопрос, а что за “object” появился в параметрах класса Foo? И почему без этого слова не импортируется класс?
offlineесли в подкаталоге, то ничего не надо добалять просто импорт меняется
И второй вопрос. А если файлы находятся в разных папках, например foo.py теперь лежит в subdirectory с именем “something”. Уже никак без добавления в path не обойтись?
import something.foo
Офлайн
[offline@jobber new]$ ls
foo.py script.py
[offline@jobber new]$ python script.py
Traceback (most recent call last):
File "script.py", line 1, in ?
import foo
File "/home/offline/pylons/new/foo.py", line 1
class Foo():
^
SyntaxError: invalid syntax
[offline@jobber new]$ ls
script.py something
[offline@jobber new]$ python script.py
Traceback (most recent call last):
File "script.py", line 1, in ?
import something.foo
ImportError: No module named something.foo
Офлайн
лично я привык писать вот так:
class Foo:
то-есть без скобок возле имени класса.
Насчёт subdirectory - попробуй добавить файл __init__.py в subdirectory.
У меня всё получилось %)
Офлайн
player
Точно, все два твои способа помогли! Большое спасибо! А вверх по директориям никак нельзя? Только в subdirectories?
Офлайн
практически есть 2 способа:
import sys
sys.path.append( "/path/to/my/module/directory/" )
import os
BASE_DIR = "required path"
os.chdir(BASE_DIR)
Офлайн
offlineскобки не надо писать
как видно из ошибки, не позволяет импортировать класс без “object”.
Офлайн