weixin_39632135
weixin_39632135
采纳率100%
2018-09-11 11:35

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

80
已采纳

请问在类里怎么调用类的函数,我想把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 weixin_39632135 3年前

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

    点赞 评论 复制链接分享
  • xingjianfengaa xingjianfengaa 3年前

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

    点赞 评论 复制链接分享
  • it_zhangwei 路漫漫兮其修远兮 3年前

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

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 3年前

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

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

    点赞 评论 复制链接分享

相关推荐