Some of these disadvantages could be overcome by using more features and idioms of Python. If most objects in a game are singletons, a simple framework could maintain references to these singletons, allow references to them by string name, and instantiate them on first reference. A hypothetical naive translation of CoD I6 to Python syntax that assumes a library with these features (non-PAWS):
class Foyer(Location):
name = 'Foyer of the Opera House'
description = """
You are standing in a spacious hall, splendidly decorated in red
and gold, with glittering chandeliers overhead. The entrance from
the street is to the north, and there are doorways south and west.
"""
s = travel_to('Bar')
w = travel_to('Cloakroom')
n = """
You've only just arrived, and besides, the weather outside
seems to be getting worse.
"""
class Cloakroom(Location):
description = """
The walls of this small room were clearly once lined with hooks,
though now only one remains. The exit is a door to the east.
"""
e = travel_to('Foyer')
class Hook(Scenery, Supporter):
def description(self):
return ("It's just a small brass hook, " +
"with a clock hanging on it."
if self.has_child('Cloak')
else "screwed to the wall.")
aliases = ['small', 'brass', 'hook', 'peg']
is_in = 'Cloakroom'
# ...
This would still allow inheritance and other forms of instantiation and instance references. Decorators and property descriptors are other ways to make the game text more succinct and intuitive, though I didn’t use them above.
I tend to favor domain-specific languages for stuff like this, but it’s interesting to think how close Python can come.
– Dan