weixin_39632135
2018-09-11 11:35
采纳率: 100%
浏览 4.0k
已采纳

请问python中调用类的方法怎么调用

请问在类里怎么调用类的函数,我想把canshu里返回的数据在order里打印出来,比如我这么写
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条回答 默认 最新

  • weixin_39632135 2018-09-13 14:33
    已采纳

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-09-11 15:17

    def canshu(self): 这个定义,你要传入的应该是DownloaderMiddleware对象,而不是整数。
    你要 b=canshu(1)
    那么应该是def canshu(x): 这个x表示整数

    如果你是做类似分页,可参考:https://blog.csdn.net/u012329294/article/details/80474964

    评论
    解决 无用
    打赏 举报
  • 路漫漫兮其修远兮 2018-09-12 01:34

    b=canshu(1),你没有定义这样的方式,如果你需要这样的方法把canshu(self)换成canshu(self,x)然后最对应的业务操作,最后在调用b=canshu(1)就没问题了

    评论
    解决 无用
    打赏 举报
  • xingjianfengaa 2018-09-12 06:03

    python 类里面的函数带self是类的本身 如canshu(self) 通过 self可以调用函数内部的成员 self.xxxxx,如果函数的参数只有self 那么调用函数时 不需要传参数,像你上面b=canshu(1),a=order(1) 里面的1是不需要的 直接用b=canshu(),a=order()就可以了

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题