0

我有以下代码:

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()theny.start()时,出现错误:

AttributeError: LaLaLa instance has no attribute 'cats_recursive'

这让我怀疑 Python 试图调用cats_recursive()不是从suchandsuch 的bot 子模块(如文件开头定义的那样),而是从LaLaLa(),当然没有cats_recursive()功能。有没有办法强制类实例使用导入的模块,而不仅仅是查看其内部?

4

3 回答 3

1

你做得很好。很可能cats_recursive()您的模块中没有真正的属性。检查语法,检查模块内容。

于 2013-05-19T16:43:30.683 回答
1

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

于 2013-05-19T16:46:52.703 回答
1

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

没有发布的代码可能是问题所在。在您对cats_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 中打印 bot 的 id 或使用 pydb 捕获错误,我怀疑你会看到 bot 是除 y 之外的 LaLaLa 的实例(再次检查 id)

于 2013-05-19T17:16:30.967 回答