[英]How to iterate over class methods
如果我導入一個模塊並且我想迭代其中的靜態方法,有沒有辦法做到這一點?
在模塊中:
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
響應。 有比使用它更好的方法嗎?
您收到無響應,因為您沒有返回任何內容。 沒有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
(這里我將顯式傳遞給它作為第三個參數)。 由於你不能調用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'
你的功能有幾個問題:
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
並考慮為搜索這個詞做一個論證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.