如果我导入一个模块并且我想迭代其中的静态方法,有没有办法做到这一点?
在模块中:
class duck():
@staticmethod
def duck_quack():
return 'Quacks like a duck'
@staticmethod
def person_walk():
return 'Walks like a person'
在控制器中:
from applications.... import duck
m = duck()
def result_m():
for stuff in dir(m):
if 'person' in stuff:
result = stuff
elif 'duck' in stuff:
result = stuff
相反,我不断收到None
回复。有没有比使用它更好的方法?
答案 0 :(得分:1)
您的功能有几个问题:
return
任何东西;和result
取决于字典中键的顺序。 尝试:
def result_m(m):
for stuff in dir(m):
if 'person' in stuff:
result = stuff
elif 'duck' in stuff:
result = stuff
return result
并考虑为要搜索的单词创建一个参数。
答案 1 :(得分:1)
您收到无响应,因为您没有返回任何内容。没有return语句的方法返回None。
我不确定你的方法的最终目标是什么,但我会这样做:
obj = Duck()
def say_something(keyword):
return getattr(obj, keyword, None)
print(say_something('duck')())
以下是一个例子:
>>> class Foo(object):
... @staticmethod
... def duck():
... return 'Quak!'
... @staticmethod
... def person():
... return 'Hello'
...
>>> a = Foo()
>>> def say_something(thing):
... return getattr(a, thing, None)
...
>>> print(say_something('duck')())
Quak!
>>> print(say_something('person')())
Hello
默认情况下, getattr
将返回None
(此处我将其显式传递为第三个参数)。由于您无法调用无,因此您可以获得此结果:
>>> print(say_something('Foo')())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
所以如果你存储结果并检查它不是None
,或者返回其他一些可调用的,那么它是最好的:
>>> def say_something(thing):
... return getattr(a, thing, lambda: 'Not Found')
...
>>> say_something('duck')()
'Quak!'
>>> say_something('person')()
'Hello'
>>> say_something('foo')()
'Not Found'