找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4959|回复: 4

[已解决] python class中递归变量的初始化定义

3

主题

7

帖子

12

积分

贫民

积分
12
jpy 发表于 2016-12-28 14:56:09 | 显示全部楼层 |阅读模式
python :2.7
操作系统:win7

问题描述:
有一个class类,其中包含一个递归函数,递归函数中有一个参数,我将其放在__init__()中初始化,但是在调用的时候会报错class对象中没有这个属性;
下面是一个实例,是我截取的一段,无法运行,但是可以看出我所描述的问题;
  1. class A:
  2.     def __int__(self):
  3.         self.pathlist = []
  4.     def get_path(self, numb):

  5.         next_elements = self.page.xpath(start_path)

  6.         tlist = self.parse_elements(next_elements)

  7.         next_path = self.assembly_path(start_path, tlist)

  8.         for pa in next_path:
  9.             self.pathlist.append(pa)
  10.             self.get_path(self.page, pa)
  11.         return self.pathlist

  12. for i in range(3):
  13.     page = 'a string !'
  14.     t = A()
  15.     pathlsit = t.get_path(page)
  16.     print(pathlsit)
复制代码


没办法,我又想了一个其他的方法,在class类变量中初始化递归函数需要的参数,但是在一个循环中调用这个类的时候,发现class类变量是全局变量,每次循环调用这个类的时候,全局变量就会发生变化
如下所示的全局变量pathlist每次经过循环后都会发生改变,而不是原来的pathlist = [],这个原因我也知道是因为它是全局变量

  1. class A:

  2.     pathlist = []
  3.     def get_path(self, numb):

  4.         next_elements = self.page.xpath(start_path)

  5.         tlist = self.parse_elements(next_elements)

  6.         next_path = self.assembly_path(start_path, tlist)

  7.         for pa in next_path:
  8.             A.pathlist.append(pa)
  9.             self.get_path(self.page, pa)
  10.         return A.pathlist

  11. for i in range(3):
  12.     page = 'a string !'
  13.     t = A()
  14.     pathlsit = t.get_path(page)
  15.     print(pathlsit)


  16. <span style="line-height: 1.5; background-color: rgb(255, 255, 255);">
  17. </span>
复制代码

回复

使用道具 举报

3

主题

7

帖子

12

积分

贫民

积分
12
jpy  楼主| 发表于 2016-12-28 14:57:42 | 显示全部楼层
所以求助:怎样定义我的递归参数pathlist,使得它可以正常的递归,以及每次循环使用这个类的时候,pathlist都会初始化即:每次循环的时候pathlist = [],而且不影响递归调用。
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-12-28 17:41:59 | 显示全部楼层
__init__ 拼成了 __int__, 你修改一下看看
python3.4.4, win10
回复 支持 反对

使用道具 举报

3

主题

7

帖子

12

积分

贫民

积分
12
jpy  楼主| 发表于 2016-12-29 16:26:22 | 显示全部楼层
whydo1 发表于 2016-12-28 17:41
__init__ 拼成了 __int__, 你修改一下看看

已经搞定了,代码如下:
  1. class A:

  2.     def get_path(self, numb,pathlist=[]):

  3.         next_elements = self.page.xpath(start_path)

  4.         tlist = self.parse_elements(next_elements)

  5.         next_path = self.assembly_path(start_path, tlist)

  6.         for pa in next_path:
  7.             self.pathlist.append(pa)
  8.             self.get_path(self.page, pa,pathlist)
  9.         return self.pathlist

  10. for i in range(3):
  11.     page = 'a string !'
  12.     t = A()
  13.     pathlsit = t.get_path(page)
  14.     print(pathlsit)
复制代码
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-12-29 20:34:48 | 显示全部楼层
python3.4.4, win10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表