类型错误位置参数自我丢失

为什么我无法访问 Classroom 对象?它显示: next_scene_name = start_scene.enter() #error TypeError: enter() missing 1 required positional argument: 'self'


请解释我犯了什么错误。


#class

class Engine(object):    #(map_object_with_classroom, player_object)

    def __init__(self,map_object,player_object):

        self.map_object = map_object

        self.player_object = player_object


    def play(self):

        print('\n')

        print('test ok')

        start_scene = self.map_object.begin()

        end_scene = self.map_object.Senario['auditorium']


        while start_scene != end_scene:

            next_scene_name = start_scene.enter() #error

            start_scene = self.map_object.next_scene(next_scene_name)


class Player(object):

    Student_influence = 20

    Staff_influence = 20

    principle_influence = 20

    def __init__(self,name):

        self.name = name



class Scene(object):

    def enter(self):

        print("test")



class ClassRoom(Scene):

    def enter(self):

        print('test ok!')

        return 'sportsclub'


class SportsClub(Scene):

    def enter(self):

        print('test ok!')

        return 'scienceclub'


class ScienceClub(Scene):

    def enter(self):

        print('test ok!')

        return 'canteen'


class Canteen(Scene):

    def enter(self):

        print('test ok!')

        return 'auditorium'


class Auditorium(Scene):

    def enter(self):

        print('test ok!')

        return 'finished'


class Finished(Scene):

    def enter(self):

        print('test ok!')

        return None


class Map(object):

    Senario = {'finished':Finished, 'classroom':ClassRoom,'sportclub':SportsClub, 'scienceclub':ScienceClub, 'canteen':Canteen, 'auditorium':Auditorium}


    def __init__(self,start_scene):

        self.start_scene = start_scene


    def begin(self):

        return self.next_scene(self.start_scene)


    def next_scene(self,scene_name):

        nxt = self.Senario.get(scene_name)

        return nxt


当我打印 start_scene 它显示那是什么?但是当我打印 ClassRoom 类的实例时,它显示 < main .ClassRoom object>


饮歌长啸
浏览 139回答 1
1回答

撒科打诨

在next_scene中,您正在返回,但ClassRoom不是. 为此,您需要,然后有一个ClassRoomreturn nxt()selfclass Map(object):&nbsp; &nbsp; Senario = {'finished':Finished, 'classroom':ClassRoom,'sportclub':SportsClub, 'scienceclub':ScienceClub, 'canteen':Canteen, 'auditorium':Auditorium}&nbsp; &nbsp; def __init__(self,start_scene):&nbsp; &nbsp; &nbsp; &nbsp; self.start_scene = start_scene&nbsp; &nbsp; def begin(self):&nbsp; &nbsp; &nbsp; &nbsp; return self.next_scene(self.start_scene)&nbsp; &nbsp; def next_scene(self,scene_name):&nbsp; &nbsp; &nbsp; &nbsp; # adding the parentheses here will call the class&nbsp; &nbsp; &nbsp; &nbsp; # creating an instance&nbsp; &nbsp; &nbsp; &nbsp; nxt = self.Senario.get(scene_name)()&nbsp; &nbsp; &nbsp; &nbsp; return nxt举个小例子:class X:&nbsp; &nbsp; def something(self):&nbsp; &nbsp; &nbsp; &nbsp; return 4X.something()Traceback (most recent call last):&nbsp; File "<stdin>", line 1, in <module>TypeError: something() missing 1 required positional argument: 'self'您还没有创建任何实例,因此self还不存在。但是,如果我们将其更改为:x = X()x.something()4Aself被创建是因为底层的类机制将调用 的基本实现__init__,而不涉及血淋淋的细节
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python