python类里调用函数

请问在类里怎么调用类的函数,比如我这么写
class DailishiyanDownloaderMiddleware(object):

# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the downloader middleware does not modify the
# passed objects.
def canshu(self):#数据库返回数据在这个函数
    aa=["192.168.1.2","11.22.33","44,55,66"]
    return aa
b=canshu(1)
print("我在函数外",b)
def order(self):#将返回数据按顺序输出
    print("我来自order")
    for i in range(10):
        yield i
a=order(1)
@classmethod
def from_crawler(cls, crawler):
    # This method is used by Scrapy to create your spiders.
    s = cls()
    crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
    return s
    ........

就能正常输出,但我如果这么写,就会报错AttributeError: 'int' object has no attribute 'canshu'
class DailishiyanDownloaderMiddleware(object):

# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the downloader middleware does not modify the
# passed objects.
def canshu(self):#数据库返回数据在这个函数
    aa=["192.168.1.2","11.22.33","44,55,66"]
    return aa
b=canshu(1)
#print("我在函数外",b)
def order(self):#将返回数控按顺序输出Ss
    print("我来自order",self.canshu())
    for i in range(10):
        yield i
a=order(1)
@classmethod
def from_crawler(cls, crawler):
    # This method is used by Scrapy to create your spiders.
    s = cls()
    crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
    return s
    ......
 省略的部分是scrapy框架的默认代码,基本没有更改
 毫无头绪的bug,求帮助,感谢
阅读 4.3k
2 个回答

你这里的canshu()order()都是实例方法,如果当做普通的函数来调用,应该以一个实例对象作为第一个参数。
你在order函数的定义里对它的第一个参数self调用了self.canshu(),然后你调用时:a = order(1),此时self1,是一个int类实例,显然没有.canshu属性。

def canshu(cls):#数据库返回数据在这个函数
    aa=["192.168.1.2","11.22.33","44,55,66"]
    return aa
b=canshu(1)
#print("我在函数外",b)
def order(cls):#将返回数控按顺序输出Ss
    print("我来自order",cls.canshu())
    for i in range(10):
        yield i
    
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题