Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2007 18:09:22

AndreyKS
От:
Зарегистрирован: 2007-10-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

Записал в файл класс “Ring”. При создании объекта класса ошибка
>>> a= Ring(1)
Traceback (most recent call last):
File “<pyshell#20>”, line 1, in <module>
a= Ring(1)
TypeError: ‘module’ object is not callable



Офлайн

#2 Дек. 7, 2007 18:11:58

AndreyKS
От:
Зарегистрирован: 2007-10-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

Вообще у меня в файле было два класса, но объём код увеличился, решил записать каждый класс в отдельный файл. Теперь не работает



Офлайн

#3 Дек. 7, 2007 18:28:11

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

я так понимаю, что класс Ring находится в файле Ring.py? Если так, то создавайте объект класса так:


import Ring
a = Ring.Ring(1)

или

from Ring import Ring
a = Ring(1)


P.S. Чувствую что пишу уж очень простые вещи, что даже мне немного стыдно:) Надеюсь я правильно понял вопрос:)



Офлайн

#4 Дек. 7, 2007 20:11:38

AndreyKS
От:
Зарегистрирован: 2007-10-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

poltergeist
P.S. Чувствую что пишу уж очень простые вещи, что даже мне немного стыдно:) Надеюсь я правильно понял вопрос:)
Спасибо. Просто в первый раз делаю. На С/С++ если включил файл, то его классы прямо используешь, без Ring.Ring



Офлайн

#5 Дек. 8, 2007 19:00:09

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

AndreyKS
from ring import *

и все его классы заполучите, но, как стращают питонеры, это может привести к конфликту имён (при совпадении таковых в разных модулях).



Офлайн

#6 Дек. 8, 2007 21:05:29

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Использование модулей

FoxPython, не советуй дурного. Знать синтаксис не значить знать язык. Переносить идиомы C/C++ или FoxPro на Python, а тем более - советовать это - моветон.

P.S. Конфликта имен не будет, будут трудноуловимые баги и куча угробленного времени, а также плохое настроение человека, которому придется поддерживать такой код.



Отредактировано (Дек. 8, 2007 21:11:23)

Офлайн

#7 Дек. 10, 2007 12:06:35

setoy
От:
Зарегистрирован: 2006-07-20
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

AndreyKS
На С/С++ если включил файл, то его классы прямо используешь, без Ring.Ring
Ето не совсем так. Если написал namespace xxx { int i; ….. }, то должен ползает xxx::i для доступ к i или писать using xxx:i / using xxx. Ето почти тоже самое как import xxx; from xxx import i, from xxx import * :)



Офлайн

#8 Дек. 10, 2007 12:23:13

setoy
От:
Зарегистрирован: 2006-07-20
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

j2a
Почему же ето так уж плохо? Язык позволяет ето, я думая в некотором случаи from x import * удобнее чем другие варианте? Я неправ?



Офлайн

#9 Дек. 10, 2007 15:44:12

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Использование модулей

В подавляющем большинстве, from foo import * - это плохо. Это не догма, но правило. Начинающим питонистам лучше его придерживаться. Неудобство в тех немногих случаях, когда это оправдано, с лихвой окупится читаемостью и сопровождаемостью кода.

P.S. Ты попробуй отрефакторить код, в каждом третьем модуле которого from foo import *, тогда поймешь чем именно это плохо.



Офлайн

#10 Дек. 17, 2007 14:19:21

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование модулей

j2a
Я лично никогда не делаю from module import * так как сразу прочитал об этом в учебнике. Раз уж человек спросил я ему ответил, что такая возможность имеется, но и предостерёг сразу. Не совсем правильно, конечно, сказал о“ конфликтах имён”. :( Уж простите меня непогрешимый j2a Вы наш. С С++ я не знаком, в фокспро такого нет, вообще. Вы увидели допущенный мною промах - поправили, на то и форум.

П.С. На ты к незнакомым людям тоже некрасиво обращаться.
П.П.С. Be easy, stay cool - воспользуйтесь собственным советом.



Отредактировано (Дек. 17, 2007 14:20:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version