假设我有一个类似的课程:
class Shell:
def cat(self, file):
try:
with open(file, 'r') as f:
print f.read()
except IOError:
raise IOError('invalid file location: {}'.format(f))
def echo(self, message):
print message
def ls(self, path):
print os.listdir(path)
在javascript环境中,您可以执行"Class"[method_name]()
之类的操作,具体取决于事物的结构。我在python中寻找类似的东西,使其成为“模拟操作系统”。 EG:
import os
def runShell(user_name):
user_input = None
shell = Shell()
while(user_input != 'exit' or user_input != 'quit'):
user_input = raw_input('$'+ user_name + ': ')
...
现在,我们的想法是他们可以输入类似的东西......
$crow: cat ../my_text
......在幕后,我们得到了这个:
shell.cat('../my_text')
同样,我希望能够在键入help
时打印该类中存在的所有方法定义。 EG:
$crow: help\n
> cat (file)
> echo (message)
> ls (path)
在python中是可以实现的吗?
答案 0 :(得分:1)
您可以使用内置函数vars
来公开对象的所有成员。这可能是为用户列出这些内容的最简单方法。如果您只打算打印到stdout
,也可以拨打help(shell)
,这会打印您的班级成员以及文档字符串等。 help
实际上只适用于交互式解释器,因此您可能最好使用vars
编写自己的帮助输出器,并将__doc__
属性神奇地添加到对象中文档字符串。例如:
class Shell(object):
def m(self):
'''Docstring of C#m.'''
return 1
def t(self, a):
'''Docstring of C#t'''
return 2
for name, obj in dict(vars(Shell)).items():
if not name.startswith('__'): #filter builtins
print(name, '::', obj.__doc__)
要挑选并执行对象的特定方法,可以使用getattr
,它按名称从对象中获取属性(如果存在)。例如,要选择并运行不带参数的简单函数:
fname = raw_input()
if hasattr(shell, fname):
func = getattr(shell, fname)
result = func()
else:
print('That function is not defined.')
当然,您可以先将用户输入标记为根据需要将参数传递给您的函数,例如您的cat
示例:
user_input = raw_input().split() # tokenize
fname, *args = user_input #This use of *args syntax is not available prior to Py3
if hasattr(shell, fname):
func = getattr(shell, fname)
result = func(*args) #The *args syntax here is available back to at least 2.6
else:
print('That function is not defined.')