Форум сайта python.su
Записал в файл класс “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
Офлайн
Вообще у меня в файле было два класса, но объём код увеличился, решил записать каждый класс в отдельный файл. Теперь не работает
Офлайн
я так понимаю, что класс Ring находится в файле Ring.py? Если так, то создавайте объект класса так:
import Ring
a = Ring.Ring(1)
или
from Ring import Ring
a = Ring(1)
P.S. Чувствую что пишу уж очень простые вещи, что даже мне немного стыдно:) Надеюсь я правильно понял вопрос:)
Офлайн
poltergeistСпасибо. Просто в первый раз делаю. На С/С++ если включил файл, то его классы прямо используешь, без Ring.Ring
P.S. Чувствую что пишу уж очень простые вещи, что даже мне немного стыдно:) Надеюсь я правильно понял вопрос:)
Офлайн
AndreyKS
from ring import *
и все его классы заполучите, но, как стращают питонеры, это может привести к конфликту имён (при совпадении таковых в разных модулях).
Офлайн
FoxPython, не советуй дурного. Знать синтаксис не значить знать язык. Переносить идиомы C/C++ или FoxPro на Python, а тем более - советовать это - моветон.
P.S. Конфликта имен не будет, будут трудноуловимые баги и куча угробленного времени, а также плохое настроение человека, которому придется поддерживать такой код.
Отредактировано (Дек. 8, 2007 21:11:23)
Офлайн
AndreyKSЕто не совсем так. Если написал namespace xxx { int i; ….. }, то должен ползает xxx::i для доступ к i или писать using xxx:i / using xxx. Ето почти тоже самое как import xxx; from xxx import i, from xxx import * :)
На С/С++ если включил файл, то его классы прямо используешь, без Ring.Ring
Офлайн
j2aПочему же ето так уж плохо? Язык позволяет ето, я думая в некотором случаи from x import * удобнее чем другие варианте? Я неправ?
Офлайн
В подавляющем большинстве, from foo import * - это плохо. Это не догма, но правило. Начинающим питонистам лучше его придерживаться. Неудобство в тех немногих случаях, когда это оправдано, с лихвой окупится читаемостью и сопровождаемостью кода.
P.S. Ты попробуй отрефакторить код, в каждом третьем модуле которого from foo import *, тогда поймешь чем именно это плохо.
Офлайн
j2a
Я лично никогда не делаю from module import * так как сразу прочитал об этом в учебнике. Раз уж человек спросил я ему ответил, что такая возможность имеется, но и предостерёг сразу. Не совсем правильно, конечно, сказал о“ конфликтах имён”. :( Уж простите меня непогрешимый j2a Вы наш. С С++ я не знаком, в фокспро такого нет, вообще. Вы увидели допущенный мною промах - поправили, на то и форум.
П.С. На ты к незнакомым людям тоже некрасиво обращаться.
П.П.С. Be easy, stay cool - воспользуйтесь собственным советом.
Отредактировано (Дек. 17, 2007 14:20:24)
Офлайн