作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用类在 python 中设计 API:
class SimulationApi(object):
def hello(self):
return "Hi"
def echo(self, string):
return string
def get_foo(self):
return self.foo
def __init__(self):
self.foo = 50
我想打印到控制台由该类定义的可用公共(public)方法的列表。有没有一种方法可以自动执行此操作,同时也会获取方法参数?理想情况下,输出如下所示:
SimulationApi:
get_foo()
echo(string)
hello()
到目前为止,我的解决方案是这样的,但它并不完整,而且可能是错误的方向。
print("SimulationApi: \n\t{}\n".format("\n\t".join([x+"()" for x in dir(SimulationApi) if not x.startswith("__")]))
最佳答案
您可以使用inspect
模块:
class SimulationApi(object):
def hello(self):
return "Hi"
def echo(self, string):
return string
def get_foo(self):
return self.foo
def __init__(self):
self.foo = 50
import inspect
inspect.getmembers(SimulationApi)
<小时/>
将返回:
[('__class__', type),
('__delattr__', <slot wrapper '__delattr__' of 'object' objects>),
('__dict__',
mappingproxy({'__module__': '__main__',
'hello': <function __main__.SimulationApi.hello(self)>,
'echo': <function __main__.SimulationApi.echo(self, string)>,
'get_foo': <function __main__.SimulationApi.get_foo(self)>,
'__init__': <function __main__.SimulationApi.__init__(self)>,
'__dict__': <attribute '__dict__' of 'SimulationApi' objects>,
'__weakref__': <attribute '__weakref__' of 'SimulationApi' objects>,
'__doc__': None})),
('__dir__', <method '__dir__' of 'object' objects>),
('__doc__', None),
('__eq__', <slot wrapper '__eq__' of 'object' objects>),
('__format__', <method '__format__' of 'object' objects>),
('__ge__', <slot wrapper '__ge__' of 'object' objects>),
('__getattribute__', <slot wrapper '__getattribute__' of 'object' objects>),
('__gt__', <slot wrapper '__gt__' of 'object' objects>),
('__hash__', <slot wrapper '__hash__' of 'object' objects>),
('__init__', <function __main__.SimulationApi.__init__(self)>),
('__init_subclass__', <function SimulationApi.__init_subclass__>),
('__le__', <slot wrapper '__le__' of 'object' objects>),
('__lt__', <slot wrapper '__lt__' of 'object' objects>),
('__module__', '__main__'),
('__ne__', <slot wrapper '__ne__' of 'object' objects>),
('__new__', <function object.__new__(*args, **kwargs)>),
('__reduce__', <method '__reduce__' of 'object' objects>),
('__reduce_ex__', <method '__reduce_ex__' of 'object' objects>),
('__repr__', <slot wrapper '__repr__' of 'object' objects>),
('__setattr__', <slot wrapper '__setattr__' of 'object' objects>),
('__sizeof__', <method '__sizeof__' of 'object' objects>),
('__str__', <slot wrapper '__str__' of 'object' objects>),
('__subclasshook__', <function SimulationApi.__subclasshook__>),
('__weakref__', <attribute '__weakref__' of 'SimulationApi' objects>),
('echo', <function __main__.SimulationApi.echo(self, string)>),
('get_foo', <function __main__.SimulationApi.get_foo(self)>),
('hello', <function __main__.SimulationApi.hello(self)>)]
注意:您的方法(您想要获取信息的方法)也是 SimulationApi
类字典 __dict__
。
您可以获得 echo
函数的完整代码,如下所示:
import inspect
lines = inspect.getsource(SimulationApi.echo)
print(lines)
<小时/>
def echo(self, string):
return string
关于python - 很好地打印了 python 类的 "public"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56238719/
使用下面的代码,我能够得到正确的答案,但是它重复了 两次 . 例如,我只想要 [1.2038, 1.206] 的结果,但下面的代码打印 [1.2038, 1.206, 1.2038, 1.206] .
我正在尝试显示我从 https://www.findomestic.it/ 中抓取 的结果, 我收到一个错误 我的代码在这里: from selenium.webdriver.common.by im
假设我有以下代码: double median = med(10.0, 12.0, 3.0); //method returns middle number as double 现在,我想写一条消息说
我是一名优秀的程序员,十分优秀!