Python:从类中调用模块的函数

时间:2013-05-19 16:39:30

标签: python module

我有以下代码:

from suchandsuch import bot

class LaLaLa():
    def __init__(self):
        self.donenow = 0
        print "LaLaLa() initialized."
        return

    def start(self):
        pages = bot.cats_recursive('something')
        for page in pages:
            self.process_page(page)

但是,当我尝试运行y = LaLaLa()然后y.start()时,我收到错误:

AttributeError: LaLaLa instance has no attribute 'cats_recursive'

这让我怀疑Python试图从suchandsuch的bot子模块调用cats_recursive()而不是(如文件开头所定义),而是来自LaLaLa(),当然没有cats_recursive()函数。有没有办法强制类实例使用导入的模块,而不是只看内部?

3 个答案:

答案 0 :(得分:1)

你做得很好。 很可能模块中没有cats_recursive()属性用于实现。检查语法,检查模块内容。

答案 1 :(得分:1)

您可能会发现最简单的方法是尝试将cats_recursive()分配给类外的pages变量,然后将变量传递给start()函数作为参数。如果这样做,那么保持这种方式,如果它不起作用,那么其他地方的代码可能有问题。

答案 2 :(得分:1)

海报是正确的,您发布的代码没有任何问题。

这是没有发布的代码可能是问题。在你的cat_recursive命名中暗示了它。您没有向我们展示可能已将LaLaLa定义或导入bot.py.

复制错误的一种方法是:

# in suchandsuch/bot.py

class LaLaLa():
    def __init__(self):
        self.donenow = 0
        print "LaLaLa() initialized."
        #  don't need a `return` here

def start(self):
    pages = bot.cats_recursive('something')
    for page in pages:
        self.process_page(page)

bot = LaLaLa()

那只是一个。另一个是__init__.py这样的东西,如:

bot = LaLaLa()

就像我说的,错误在你的代码结构中。

在LaLaLa中打印机器人的id或者用pydb封装错误,我怀疑你会看到机器人是除了y之外的LaLaLa实例(再次检查id)