我目前正在尝试制作基于文本的游戏,并且我想添加一个功能,根据用户在命令行(或Python shell)中的输入,它会检测到相应的方法,并返回它
例如,当用户在命令行中键入'legal moves!'
时:
>>> legal moves!
'You have 10 legal moves, which are...'
或类似的东西。
我知道如果我创建一个类和一个名为legal_moves(self)
的方法,用户就可以键入CLASSNAME.legal_moves()
来调用同一个东西,但我试图将其设为假设他们对python一无所知,对玩家来说尽可能简单。
目前我有这样的事情,但我不确定如何使其发挥作用:
def MyClass():
def __init__(self):
player_words = input
if player_words == "help me":
return self.help_menu()
def help_menu(self):
print("To receive help...")
答案 0 :(得分:1)
你非常接近!
首先,您必须使用class
而不是def
来声明一个类:
class MyClass():
然后,使用input()
以获取用户输入。
答案 1 :(得分:1)
有几种选择;您可以使用getattr()
function将字符串转换为实例上的属性;这包括访问方法:
class MyClass():
def __init__(self):
player_words = input()
player_words = player_words.lower().replace(' ', '_')
try:
getattr(self, player_words)()
except AttributeError:
print("Sorry, there is no such command")
def help_me(self):
print("To receive help...")
这会将'Help me'
转换为help_me
并找到要调用的相应方法。
要列出所有可能的方法,您可以使用inspect.getmembers()
function和inspect.ismethod()
predicate function列出您班级提供的所有方法;您不必过滤这些内容,因为您不想向访问者展示__init__
方法。也许您可以为此目的重载函数的__doc__
属性;它包含function documentation string:
from inspect import getmembers, ismethod
def is_documented_method(ob):
return ismethod(ob) and ob.__doc__
class MyClass():
def __init__(self):
available_methods = getmembers(self, is_documented_method)
help_info = [
(name.replace('_', ' ').title(), func.__doc__)
for name, func in available_methods]
for name, documentation in help_info:
print(name, documentation, sep=': ')
player_words = input()
player_words = player_words.lower().replace(' ', '_')
try:
getattr(self, player_words)()
except AttributeError:
print("Sorry, there is no such command")
def help_me(self):
"""Provide help on all commands"""
print("To receive help...")
def frob_the_foobar(self):
"""Frobbing the Foobar will ..."""
print("Frobbing the Foobar, sir!")
后者的演示:
>>> MyClass()
Frob The Foobar: Frobbing the Foobar will ...
Help Me: Provide help on all commands
help me
To receive help...
<__main__.MyClass object at 0x1114829e8>
>>> MyClass()
Frob The Foobar: Frobbing the Foobar will ...
Help Me: Provide help on all commands
Frob The Foobar
Frobbing the Foobar, sir!
<__main__.MyClass object at 0x111482b38>