注册 登录
编程论坛 Python论坛

python入门的一些问题 向各位大神请教

n172474108 发布于 2017-04-03 10:46, 3776 次点击
from random  import choice
class RandomWalk():
    def _init_(self,num_points=5000):
        self.num_points=num_points
        self.x_values=[0]
        self.y_values=[0]
    def fill_walk(self):
        while len(self.x_values)<self.num_points:


            x_direction=choice([1,-1])
            x_distance=choice([0,1,2,3,4])
            x_step=x_direction * x_distance
            y_direction=choice([1,-1])
            y_distance=choice([0,1,2,3,4])
            y_step=y_direction * y_distance
            if x_step==0 and y_step==0:
                continue
            next_x=self.x_values[-1]+x_step
            next_y=self.y_values[-1]+y_step
            self.x_values.append(next_x)
            self.y_values.append(next_y)



Traceback (most recent call last):
  File "rw_visual.py", line 4, in <module>
    rw.fill_walk()
  File "E:\python_work\random_walk.py", line 8, in fill_walk
    while len(self.x_values)<self.num_points:
AttributeError: 'RandomWalk' object has no attribute 'x_values'

------------------
(program exited with code: 1)
请按任意键继续. . .


求大神解答 ,这个问题怎么解决?
1 回复
#2
sunb32017-04-24 11:33
回复 楼主 n172474108
目标对象“使用了未定义的变量”。
因为你没有给出完整的代码,所以我不知道你实际实例化对象的过程。不过我个人觉得应该是以下原因的其中一种:

1、没有写构造函数
2、你没有先实例化对象





1、构造函数的init前后要用两个下划线,即“__init__”,我不知道你这个“_init_”是不是构造函数,如果是请更正
2、如果你的确额外指定了"__init__"构造对象,那问题应该就是出在__init__过程中了,具体要看代码来确认症结

另外,设置成属性应该更好一些:

程序代码:

from random  import choice
class RandomWalk():
    X,Y = "x_values","y_values"
    def _init_(self,num_points=5000):
        self.num_points=num_points
        self.X=[0]
        self.Y=[0]
    def fill_walk(self):
        while len(self.X)<self.num_points:
            #...
            self.X.append(next_x)
            self.Y.append(next_y)


这样如果X在操作过程中出了问题(比如提前被释放了,或者没赋值),POINT.X会还原显示“x_value”,方便查找问题点。
1