这是我编写的一些代码,目的是让我有不止一种方法来初始化我的 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. 但是,如您所见,在这种情况下我没有忘记。所以我认为这个错误与我的类方法在幕后发生的事情有关,我刚刚开始尝试研究究竟是什么魔法,但我想我可能会有你们中的一个好心人帮助我改为理解。
在此先感谢,如果我错过了一些明显的东西,我很抱歉。