用gym自己搭建环境导致no attribute报错怎么办?

做《深入浅出的强化学习》课后习题想自己用gym搭建一个迷宫。
环境成功导入后运行main.py报错:

Traceback (most recent call last):
File "C:/Users/Harold/PycharmProjects/RFL3.5.3/main.py", line 5, in
env.render()
File "C:\Users\Harold.conda\envs\gymlab\lib\site-packages\gym\envs\classic_control\RNLMaze1.py", line 108, in render
if self.viewer is None:
AttributeError: 'RNLMaze1' object has no attribute 'viewer'

附环境的代码:

import gym
import numpy.random
import time
from numpy import random
from gym.envs.classic_control import rendering

class RNLMaze1(gym.Env):
    def __int__(self):
        self.viewer = None
        #状态空间
        self.states = [1, 2, 3, 4, 5,
                       6, 7, 8, 9, 10,
                       11, 12, 13, 14, 15,
                       16, 17, 18, 19, 20,
                       21, 22, 23, 24, 25]
        #动作空间,a是一个字符
        self.actions = ['n','e','s','w']
        #回报函数
        self.rewards = dict()
        #创建奖励
        self.rewards['10_s'] = 10
        self.rewards['14_e'] = 10
        self.rewards['20_n'] = 10

        #状态转移,s是一个数值
        self.t = dict()
        self.t['1_s'] = 6
        self.t['1_e'] = 2
        self.t['2_w'] = 1
        self.t['2_s'] = 7
        self.t['2_e'] = 3
        self.t['3_w'] = 2
        self.t['3_s'] = 8
        self.t['5_s'] = 10
        self.t['6_n'] = 1
        self.t['6_e'] = 7
        self.t['7_w'] = 6
        self.t['7_n'] = 2
        self.t['7_e'] = 8
        self.t['8_w'] = 7
        self.t['8_n'] = 3
        self.t['8_s'] = 13
        self.t['10_n'] = 5
        self.t['10_s'] = 15
        self.t['13_n'] = 8
        self.t['13_e'] = 14
        self.t['13_s'] = 18
        self.t['14_w'] = 13
        self.t['14_e'] = 15
        self.t['14_s'] = 19
        self.t['16_e'] = 17
        self.t['16_s'] = 21
        self.t['17_w'] = 16
        self.t['17_e'] = 18
        self.t['17_s'] = 22
        self.t['18_w'] = 17
        self.t['18_e'] = 19
        self.t['18_n'] = 13
        self.t['19_w'] = 18
        self.t['19_n'] = 14
        self.t['19_e'] = 20
        self.t['20_w'] = 19
        self.t['20_n'] = 15
        self.t['21_n'] = 16
        self.t['21_e'] = 22
        self.t['22_w'] = 21
        self.t['22_n'] = 17

    #更新s,反馈r,结束条件
    def step(self, action):
        #系统当前状态
        state = self.state
        #组合状态和动作
        key = '%d_%s' % (state, action)
        #状态转移,下一状态不撞墙则更新,撞墙则不更新
        if key in self.t:
            next_state = self.t[key]
        else:
            next_state = state
        self.state = next_state
        #出口判断
        is_terminal = False
        #下一状态到达出口,获得10奖励并退出
        if key in self.rewards:
            r = 10
            is_terminal = True
        #下一状态未到达出口,获得-1奖励并继续
        else:
            r = -1
        return next_state,r,is_terminal,{}

    #将环境设置为初始状态
    def reset(self):
        wall = [4, 9, 11, 12, 23, 24 ,25]
        self.state = numpy.random.random_integers(25)
        while self.state in wall:
            self.state = numpy.random.random_integers(25)
        return self.state

    #关闭图形界面
    def close(self):
        if self.viewer:
            self.viewer.close()
            self.viewer = None

    #绘制图形界面
    def render(self, mode='human'):
        if self.viewer is None:
            self.viewer = rendering.Viewer(1000, 1000)
        #画线
        for i in range(0, 6):
            linei = rendering.Line((100, 300 + 100 * i), (600, 300 + 100 * i))
            self.viewer.add_geom(linei)
        for i in range(0, 6):
            linei = rendering.Line((100 + 100 * i, 300), (100 + 100 * i, 800))
            self.viewer.add_geom(linei)
        # 画墙
        apolygon1 = rendering.make_polygon([(100, 500), (300, 500), (300, 600), (100, 600)], filled=True)
        self.viewer.add_geom(apolygon1)
        apolygon2 = rendering.make_polygon([(400, 600), (500, 600), (500, 800), (400, 800)], filled=True)
        self.viewer.add_geom(apolygon2)
        apolygon1 = rendering.make_polygon([(300, 300), (600, 300), (600, 400), (300, 400)], filled=True)
        self.viewer.add_geom(apolygon1)
        return self.viewer.render(return_rgb_array=mode == 'rgb_array')

我可能不太清楚,但初始化方法应该是__init__吧,应该不是__int吧,所以你可以试一下