我有 2 类 Emoji 和 EmojiRun。 我想通过EmojiRun调用Emoji类函数,使用无限循环
class Emoji:
def __init__(self):
self.green = (0, 255, 0)
self.yellow = (255, 255, 0)
self.blue = (0, 0, 255)
self.red = (255, 0, 0)
self.white = (255, 255, 255)
self.nothing = (0, 0, 0)
self.brown = (165, 42, 42)
def face(self):
return face
def smile(self):
return smile
def sad(self):
return sad
在我的 EmojiRun 类中,我需要调用函数 face
、smile
、sad
。
我可以单独调用它,但我想知道是否有一种方法可以迭代Class Emoji的函数,就像下面的例子,我知道它是错误的
#Main class to run Emoji
from animatedEmoji import Emoji
from sense_hat import SenseHat
from time import sleep
#Class instance emoji
emoji = Emoji()
sense = SenseHat()
while True:
#Forloop to call emoji functions 1 by 1
for x in Emoji:
sense.set_pixels(emoji.function[x])
sleep(3)
最佳答案
您可以添加一个函数,为您提供 Emoji
支持的所有表达式:
class Emoji:
... // same code as before
def expressions(self):
yield self.face
yield self.smile
yield self.sad
然后您可以使用以下方式调用它:
e = Emoji()
for exp in e.expressions():
sense.set_pixels(exp())
sleep(3)
您也可以调用它们并产生它们的结果,而不是提供绑定(bind)成员函数。
只要表达式很少,这种方法就有效。一旦有了很多表达式,维护 expressions()
函数就变得很麻烦。当您有派生类时更是如此。在这种情况下,我建议您研究两种替代方法:
- 内省(introspection)。基本上,这意味着您扫描对象以查找方法,例如不接受任何参数(
self
除外)并返回一个表达式。这可能需要在函数上添加返回类型注释。 - 注册表达式。阅读装饰器的文档,它允许您编写一个维护每种类型的表达式函数列表的装饰器。您所要做的就是在函数声明前添加
@expression_function
前缀。
关于python - 在当前类中循环调用另一个类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60751562/