我有以下代码:
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()函数。有没有办法强制类实例使用导入的模块,而不是只看内部?
答案 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)