3

这是我编写的一些代码,目的是让我有不止一种方法来初始化我的 GameObject 类:

class GameObject(object):

    def __init__(self, name, location, description, aliases=[]):
        self.name = name
        self.location = location
        self.description = description
        self.aliases = aliases
        ...

    @classmethod
    def from_values(cls, name, location, description, aliases=[]):
        return cls(name, location, description, aliases)

    @classmethod
    def from_super(cls, object):
        return cls(object.name, object.location, \
            object.description, object.aliases)

具体来说,我尝试使用它的方式是from_super()从 GameObject 的子类调用我的方法并返回该子类的实例,给定一个 GameObject 实例。这看起来像:

item = o.GameObject(name, room.id, description, aliases)
if item_type == 'fix':
    item = fix.Fixture.from_super(item)
if item_type == 'move':
item = move.Moveable.from_super(item)
if item_type == 'take':
    item = take.Takeable.from_super(item)

# do something with item

在 Takeable 中:

import object

class Takeable(object.GameObject):

    def __init__(self, name, current_room, description):
        object.GameObject.__init__(self, name, current_room, description)
        ...

我认为这相当漂亮,但不幸的是,当我执行最后一点时,它在 GameObject 的代码中失败了,并且出现了一个非常熟悉的错误......

回溯(最后一次调用):
文件“create_map.py”,第 207 行,
create_map()
文件“create_map.py”,第 191 行,create_map
create_items(room)
文件“create_map.py”,第 83 行,create_items
item = take.Takeable.from_super(item)
文件“/home/brian/代码/chimai/chimai/objects/object.py",第 21 行,在 from_super
return cls(object.name, object.location, object.description, object.aliases)
TypeError:__init__()恰好需要 4 个参数(给定 5 个)

......我不明白。通常,当我收到此错误时,我忘记包含 self. 但是,如您所见,在这种情况下我没有忘记。所以我认为这个错误与我的类方法在幕后发生的事情有关,我刚刚开始尝试研究究竟是什么魔法,但我想我可能会有你们中的一个好心人帮助我改为理解。

在此先感谢,如果我错过了一些明显的东西,我很抱歉。

4

0 回答 0