2014-01-02 1 views
2

Я сам изучаю сам Python, и у меня есть проблема с душой, потому что я не понимаю, почему это не работает. Я использую PyDev, и я загружаю версию 2 Python. У меня есть этот код:Статический метод в Python не работает

class Utils: 

    @staticmethod 
    def hello(): 
     print "Hi! I'm the Utils class" 

Utils.hello() #Hi! I'm the Utils class 

и все работает нормально на данный момент. Но если я импортировать класс Utils и вызвать статический метод из другого модуля ...

import Utils 

Utils.hello() 

Я получаю эту ошибку:

Traceback (most recent call last): 
    File "C:\Users\migugonz\Desktop\Docs\Per Folder\WorkSpacePy\Rosalind\src\bioinformatics\stronghold\Pruebas.py", line 40, in <module> 
    Utils.hello() 
AttributeError: 'module' object has no attribute 'hello' 

я вещь не может быть большое дело, но я «Я искал решение, и пока знаю, что это будет работа.

+2

Python не PHP: вам не нужны классы для эмуляции пространств имен. Просто сделайте 'hello' глобальную функцию в Utils. – georg

+2

Python - это не Java, нет абсолютно никаких причин иметь здесь класс, особенно если все это содержит статические методы. Просто положите 'hello' на верхний уровень файла. –

+0

Спасибо всем. Это правда, я пришел из Java, и я использую статический класс для методов многократного использования. Может быть, это лучший способ сделать это, как вы говорите, thg435. Благодаря! – Hannibaal

ответ

6

Я считаю, что вам нужно сделать Utils.Utils.hello()

или импортировать как from Utils import Utils

+1

Именно поэтому PEP8 предполагает, что модули должны иметь все имена нижнего регистра. Если @Hannibaal использовал 'utils.py' в качестве имени для модуля, не было бы возможности путать модуль и класс. – Duncan

+1

Теперь мои модули будут строчными. Я был смущен, потому что в java имя файла (работа с eclipse) является самим классом. – Hannibaal

Смежные вопросы