Найти - Пользователи
Полная версия: Как вызвать class?
Начало » Python для новичков » Как вызвать class?
1 2
offline
Не могу понять как в питоне работают с классами. Для примера есть файл /home/user/class.py в котором описан класс
class MyClass:
"A simple example class"
i = 12345
def f(self):
return 'hello world'
Теперь я хочу из другого файла ( /home/user/script.py ) воспользоваться этим классом и вызвать функцию f().

Знакомые говорят что надо прописывать папку /home/user в path и делать import. Так ли это? Получается немного не удобно.. Может есть другие способы?
Александр Кошелев
offline
Теперь я хочу из другого файла ( /home/user/script.py ) воспользоваться этим классом и вызвать функцию f().
class - плохое название для файла. переименуй хотя бы в my_class.py. Потом, если файл лежит в тоже директории что и вызвающий скрипт, то пишешь просто
import my_class

mc = my_class.MyClass()
mc.f()
offline
Знакомые говорят что надо прописывать папку /home/user в path и делать import.
правду говорят, чтобы питон “видил” модули директории с ними должны быть прописаны в $PYTHON_PATH переменной окружения. Или в самом скрипте можно динамически добавлять:
import sys

sys.path.append( "/path/to/my/module/directory/" )
#тут уже можно импортировать модули из "/path/to/my/module/directory/"
j2a
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')
offline
Большое спасибо, насчёт названий скриптов понял.
Вариант j2a очень порадовал, всё таки не надо добавлять путь в path. Но тут же появился другой вопрос, а что за “object” появился в параметрах класса Foo? И почему без этого слова не импортируется класс?

И второй вопрос. А если файлы находятся в разных папках, например foo.py теперь лежит в subdirectory с именем “something”. Уже никак без добавления в path не обойтись?
Александр Кошелев
offline
Но тут же появился другой вопрос, а что за “object” появился в параметрах класса Foo? И почему без этого слова не импортируется класс?
Импортируется и так. Просто оbject это базавый класс для new-style классов в python. На ранних этапах работы с питон об этом можно не задумываться.
offline
И второй вопрос. А если файлы находятся в разных папках, например foo.py теперь лежит в subdirectory с именем “something”. Уже никак без добавления в path не обойтись?
если в подкаталоге, то ничего не надо добалять просто импорт меняется
import something.foo
offline
[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
как видно из ошибки, не позволяет импортировать класс без “object”. Версия питона у меня python-2.4.4.

Насчёт subdirectory тоже не получлось, пишет
[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
player
лично я привык писать вот так:
class Foo:
то-есть без скобок возле имени класса.

Насчёт subdirectory - попробуй добавить файл __init__.py в subdirectory.
У меня всё получилось %)
offline
player
Точно, все два твои способа помогли! Большое спасибо! А вверх по директориям никак нельзя? Только в subdirectories?
player
практически есть 2 способа:
import sys
sys.path.append( "/path/to/my/module/directory/" )
import os
BASE_DIR = "required path"
os.chdir(BASE_DIR)
Если нужно просто импортировать модуль (файл) то я рекомендую первый вариант.
Если необходимо чтобы вся логика исполнения скрипта начиналась с нужного пути - тогда второй.
Александр Кошелев
offline
как видно из ошибки, не позволяет импортировать класс без “object”.
скобки не надо писать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB