AttributeError при попытке получить доступ к функции Python - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь получить доступ к функции Python класса в другой скрипт.Это дает мне следующую ошибку:

AttributeError: 'module' object has no attribute 'functionName'

Функция присутствует в классе и доступна через вызов classname.functionName ().Есть что-то, что я пропускаю?

-update-

Мой код:

(program.py)
import ImageUtils
import ...
class MyFrame(wx.Frame):
...
    ImageUtils.ProcessInformation(event)


(ImageUtils.py)
import statements... 
class ImageUtils(threading.Thread):
    def ProcessInformation(self, event):
        self.queue.put(event)

Таким образом, ошибка: AttributeError: у объекта 'module' нетАтрибут 'ProcessInformation' Итак, я должен сделать этот второй скрипт только модулем?

Ответы [ 3 ]

5 голосов
/ 23 ноября 2011

Функция внутри класса называется методом.Вы можете получить к нему доступ из другого модуля с помощью

import module
module.Classname.method

Однако, если этот метод не является особым видом вызова метода staticmethod или classmethod, вы не сможете вызвать его с помощью module.Classname.method().

Вместо этого вам нужно создать экземпляр класса:

inst=module.Classname(...)

, а затем вызвать метод из экземпляра класса:

inst.method()

причина, по которой вы получили ошибку

AttributeError: 'module' object has no attribute 'function_name'

, заключается в том, что module не имеет переменной с именем function_name в своем пространстве имен.Однако у него есть переменная с именем Classname.Между тем, Classname имеет переменную с именем function_name в своем пространстве имен.Таким образом, чтобы получить доступ к методу, вам нужно «закопаться» до function_name, выполнив два поиска атрибутов: module.Classname.function_name.

2 голосов
/ 23 ноября 2011

Возможно, вы пытаетесь вызвать функцию из модуля, а не из класса.Я предлагаю вам сделать что-то вроде:

from my_module import my_class

my_class.my_function(...)
# bla bla bla

РЕДАКТИРОВАТЬ: Я думаю, что Python не позволяет использовать "-" в имени функции.

0 голосов
/ 23 ноября 2011

Возможно, вы захотите попробовать функцию dir(), чтобы увидеть, присутствует ли эта функция, как вы ожидаете.

Пример использования модуля math:

>>> import math
>>> dir(math)
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
...