Найти - Пользователи
Полная версия: Использование модулей
Начало » Python для экспертов » Использование модулей
1 2
AndreyKS
Записал в файл класс “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
AndreyKS
Вообще у меня в файле было два класса, но объём код увеличился, решил записать каждый класс в отдельный файл. Теперь не работает
poltergeist
я так понимаю, что класс Ring находится в файле Ring.py? Если так, то создавайте объект класса так:


import Ring
a = Ring.Ring(1)

или

from Ring import Ring
a = Ring(1)


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

и все его классы заполучите, но, как стращают питонеры, это может привести к конфликту имён (при совпадении таковых в разных модулях).
j2a
FoxPython, не советуй дурного. Знать синтаксис не значить знать язык. Переносить идиомы C/C++ или FoxPro на Python, а тем более - советовать это - моветон.

P.S. Конфликта имен не будет, будут трудноуловимые баги и куча угробленного времени, а также плохое настроение человека, которому придется поддерживать такой код.
setoy
AndreyKS
На С/С++ если включил файл, то его классы прямо используешь, без Ring.Ring
Ето не совсем так. Если написал namespace xxx { int i; ….. }, то должен ползает xxx::i для доступ к i или писать using xxx:i / using xxx. Ето почти тоже самое как import xxx; from xxx import i, from xxx import * :)
setoy
j2a
Почему же ето так уж плохо? Язык позволяет ето, я думая в некотором случаи from x import * удобнее чем другие варианте? Я неправ?
j2a
В подавляющем большинстве, from foo import * - это плохо. Это не догма, но правило. Начинающим питонистам лучше его придерживаться. Неудобство в тех немногих случаях, когда это оправдано, с лихвой окупится читаемостью и сопровождаемостью кода.

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

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